{"version":3,"sources":["components/CustomSVG/index.tsx","graphql/queries/balance.tsx","actions/index.js","context/constants/brokerInfo.tsx","graphql/queries/bitkubExecution.tsx","components/CTextField/index.tsx","actions/languageActions.tsx","context/brokerList/index.tsx","context/errors/clientError/index.tsx","components/Loaders/Spinner/index.tsx","components/Loaders/Roller/index.tsx","graphql/mutations/investor.tsx","utils/responseReducer.ts","components/PopUp/SelectBrokerPopup/BrokerCell.tsx","components/PopUp/SelectBrokerPopup/index.tsx","components/PopUp/AuthPopUp/RegisterPopUp/index.tsx","components/PopUp/AuthPopUp/index.tsx","components/PopUp/ForgotPasswordPopup/ForgotPasswordFillPopup/index.tsx","components/PopUp/ForgotPasswordPopup/ResetPasswordPopup/index.tsx","components/PopUp/ForgotPasswordPopup/index.tsx","components/PopUp/AuthenPopup/index.tsx","graphql/queries/brokers.tsx","context/SettingsContext.tsx","utils/settings.tsx","hooks/rest/useRequestResetPassword.tsx","context/constants/datetime.tsx","graphql/queries/model.tsx","components/ErrorBox/index.tsx","hooks/useBroker.tsx","utils/analytics.jsx","components/Page/index.tsx","utils/NumberFormatCustom.tsx","context/constants/bitkub.tsx","utils/EnvManager/index.tsx","graphql/queries/investor.ts","components/CountdownButton/index.tsx","graphql/mutations/subscription.tsx","context/constants/rebalance.tsx","components/PasswordValidator/index.tsx","components/PopUp/AuthPopUp/LoginPopUp/index.tsx","components/PopUp/PopUpComponents/OTPConfirmPopup/index.tsx","hooks/query/useModelInfos.tsx","hooks/query/useProfitSharingInfos.tsx","hooks/query/useQueryBalance.tsx","hooks/query/useQueryProfitSharingUnsubscribe.tsx","graphql/queries/bitkubAction.tsx","hooks/query/useBitkubActionsQuery.tsx","hooks/query/useAllBitkubActionsQuery.tsx","hooks/query/useBitkubExecutionQuery.tsx","hooks/query/useBitkubExecutionOrderHistoryQuery.tsx","hooks/query/useBitkubGridReturnQuery.tsx","hooks/rest/useRequestRegisPhoneNo.tsx","theme/index.tsx","views/HomePage/Footer/index.tsx","config/index.tsx","utils/utils.tsx","utils/customHook/useProfile.tsx","utils/customHook/useLayout.tsx","utils/customHook/useQueryMe.tsx","utils/customHook/useTimeleft.tsx","utils/axios.tsx","components/Logo/index.tsx","components/MockToggle/index.tsx","components/BetaChip/index.tsx","hooks/useModalState.tsx","layouts/LandingLayout/TopBar/index.tsx","layouts/LandingLayout/AppBar/index.tsx","layouts/LandingLayout/index.tsx","components/AuthGuard.tsx","components/GuestGuard.tsx","components/ApprovedGuard.tsx","components/RedirectDefaultBroker.tsx","components/MockGuard.tsx","Routes/config.tsx","Routes/index.tsx","components/ModalProvider/modals/AddBrokerModal/SelectBrokerSection.tsx","components/ModalProvider/modals/AddBrokerModal/SigninBrokerSection.tsx","components/ModalProvider/modals/AddBrokerModal/index.tsx","components/ModalProvider/modals/AddBrokerSuccessModal/index.tsx","components/ModalProvider/modals/SnakbarModal/index.tsx","components/ModalProvider/modals/ModelSubConfirmModal/index.tsx","components/ModalProvider/modals/DeleteBrokerModal/index.tsx","components/ModalProvider/modals/DeleteBrokerSuccessModal/index.tsx","components/ModalProvider/modals/OTPConfirmModal/index.tsx","components/ModalProvider/index.tsx","components/PDPACookie/index.tsx","layouts/PlainLayout/index.tsx","components/LoadingWithPlainLayoutScreen/index.tsx","components/Auth.tsx","mock/GraphQLMock/index.tsx","components/MultiBrokerManager/InvalidBrokerPage/index.tsx","views/MaintenancePage/index.tsx","components/MultiBrokerManager/index.tsx","components/MaintenanceChecker/index.tsx","mock/axiosMock/index.tsx","App.tsx","reportWebVitals.ts","reducers/languageReducer.tsx","reducers/accountReducer.tsx","reducers/modalReducer.tsx","reducers/index.tsx","store/index.tsx","index.tsx","context/constants/role.tsx","context/constants/subscribeState.tsx","context/constants/monthEngToThai.tsx","context/constants/cookieName.tsx","context/constants/bitkubAction.tsx","services/authService.tsx","actions/accountActions.tsx","context/constants/errorCode.tsx","utils/customHook/useRouteManager.tsx","components/PopUp/BasePopUp.tsx","components/PopUp/BaseDrawer.tsx","hooks/useLayout.tsx","hooks/usePrevious.tsx","hooks/useBrokerFromCookie.tsx","hooks/useExchange.tsx","hooks/useGuess.tsx","components/LoadingScreen/index.tsx","components/PopUp/PopUpComponents/WhitePopup/WhitePopup.tsx","components/PopUp/PopUpComponents/WhitePopup/WhitePopupAction.tsx","components/PopUp/PopUpComponents/WhitePopup/WhitePopupContent.tsx","components/PopUp/PopUpComponents/WhitePopup/WhitePopupTitle.tsx","hooks/useCookie.tsx","actions/modalActions.tsx"],"names":["HourGlassAnimated","id","width","height","viewBox","cx","cy","r","style","stroke","strokeWidth","fill","strokeDasharray","strokeDashoffset","d","attributeName","dur","to","repeatCount","strokeLinecap","xlinkHref","type","begin","values","keyTimes","points","DepositIcon","xmlns","WithdrawIcon","SortDown","SortUp","PortfolioIcon","src","PersonIcon","ModelIcon","TransactionIcon","ActionTrendIcon","ActionReversalIcon","CalculatorIcon","alt","WithdrawSuccessIcon","xmlnsXlink","x","patternContentUnits","transform","MainteningIcon","fillOpacity","clipRule","fillRule","Streaming","BALANCE","gql","PORT_VALUE","BITKUB_BALANCE","EXCHANGES","bitkub","settrade","default","BROKERS","name","model","unit","max","url","description","globlex","BITKUB_EXECUTIONS","BITKUB_EXECUTION","CAL_GRID_INFO","BITKUB_ORDER_HISTORY","BITKUB_GRID_RETURN","useStyles","makeStyles","theme","root","iconColor","color","palette","divider","CTextField","props","classes","useState","showPassword","setShowPassword","className","children","InputProps","endAdornment","position","onClick","onMouseDown","event","preventDefault","edge","TO_ENGLISH","TO_THAI","brokerList","brokerID","process","brokerName","icon","maxHeight","clientError","somethingWentWrong","__typename","code","message","somethingWentWrongWait1Minute","proxyBlock","connectionWentWrong","phoneNoMustStartWith0","swtichBrokerFail","bitkubRegisFail","bitkubApiInvalid","bitkubBestbidReqFail","bitkubWrongCurrency","loginFail","requestRegisPhoneNoFail","missingBrokerID","missingPhoneNo","invalidPhoneNo","requestResetPasswordFail","Spinner","Roller","UPDATE_INVESTOR","DELETE_INVESTOR","addInvestorAccountByLogin","deleteInvestorAccount","CREATE_INVESTOR_PASSWORD","responseReducer","gqlResponse","error","undefined","data","errorMessage","brokerSelect","margin","title","display","alignItems","ExpandIcon","useTheme","SvgIcon","primary","main","BrokerCell","handleClickLogin","Icon","Button","Box","px","Typography","flex","brokerSlot","border","borderRadius","spacing","padding","flexDirection","textWrap","whiteSpace","overflow","textOverflow","mobileDrawer","breakpoints","down","background","paper","close","SelectBrokerPopup","onClose","open","onClickBroker","isDesktop","useLayout","handleClose","p","options","suppressScrollX","justifyContent","map","broker","Tooltip","arrow","py","variant","noWrap","Drawer","anchor","IconButton","mx","index","Divider","RegisterPopUp","handleSwitch","exchange","useExchange","RegisterMultiBrokerPopup","React","lazy","regiserPopupManager","Fragment","fallback","AuthPopUp","isLogIn","openForgot","ForgotPasswordFillPopup","openLogin","onSuccess","isSmall","useRequestResetPassword","loading","requestResetPassword","useTimeleft","timeLeft","restartCount","resetCount","phoneNo","setPhoneNo","setErrorMessage","useEffect","_timeLeftMessage","minutes","Math","floor","seconds","timeLeftMessage","useMemo","isBan","onResetPassword","a","ERROR_CODE","OTP_BAN","err","second","RenderContent","mt","ErrorBox","TextField","label","fullWidth","value","placeholder","helperText","onChange","e","target","inputComponent","NumberFormatCustom","onKeyPress","key","size","disabled","length","BaseDrawer","ResetPasswordPopup","phoneNumber","setLoading","password","setPassword","cfPassword","setCfPssword","passwordValid","setPasswordValid","handleChange","val","CFPasswordError","Promise","resolve","reject","authService","resetPassword","response","pl","PasswordValidator","onChangeValid","valid","Grid","container","item","xs","ForgotPasswordPopup","registerState","setRegisterState","setPhoneNumber","toHome","window","location","pathname","renderWhitePopupConfirm","WhitePopup","align","fontWeight","CountdownButton","startCount","time","onTimeout","textStyle","OTPConfirmPopup","onBack","confirmType","POPUP","decision","login","regis","forgot","selectBroker","AuthenPopup","initialPopup","useBroker","currentPopup","setCurrentPopup","setBrokerName","setBrokerID","resetState","includes","defaultSettings","language","SettingsContext","createContext","settings","saveSettings","SettingsProvider","currentSettings","setCurrentSettings","Provider","updateSettings","mergedSettings","_","merge","storeSettings","Consumer","restoreSettings","storedData","localStorage","getItem","JSON","parse","setItem","stringify","resReducer","monthListTH","monthListShortTH","modelInfoSchema","MODEL_INFO","MODEL_INFOS","MODEL_RETURNS","MODEL_SIGNALS","MODEL_STAT","MODEL_MONTHLY_RETURNS","backgroundColor","marginLeft","marginRight","ErrorIcon","fontSize","ErrorText","secondary","light","isExpand","setIsExpand","setTimeout","in","useSelector","state","account","track","gtag","REACT_APP_GA_MEASUREMENT_ID","Page","forwardRef","ref","rest","useLocation","sendPageViewEvent","useCallback","page_path","Helmet","inputRef","other","format","getInputRef","onValueChange","mask","BITKUB_MENU_BOT_GRID_DISABLES_KEY","envManager","envs","isMaintenance","isPhoneNoLoginAvailable","bitkubMenuBotGridDisables","isShowRiskFeature","this","INVESTOR","timer","setTimeLeft","setInterval","clearInterval","SUBSCRIBE","PROFITSHARING_UNSUBSCRIBE","UNSUBSCRIBE","UPDATE_INVESTOR_SUBSCRIPTION","REBALANCE","month","week","day","none","_passwordConstrain","passwordConstrain","setPasswordConstrain","setValid","isValidPassword","Object","keys","reduce","accu","current","checkPasswordConstrain","LoginPopupContext","useLoginPopupContext","useContext","LoginPopUp","tableOverviewStore","LoginMultiBrokerPopup","loginPopupManager","onFail","requestRegisPhoneNo","useRequestRegisPhoneNo","otp","setOtp","otpError","setOtpError","banErrorCallback","onClickSendAgain","regisPhoneNoData","resetPasswordData","verifyOTP","renderDonotAccept","paddingTop","paddingBottom","renderEnterOTP","RenderOtp","m","inputStyle","text","borderStyle","borderColor","borderWidth","errorStyle","focusStyle","outline","shouldAutoFocus","numInputs","separator","isInputNum","hasErrored","isDisabled","modelPeriods","useModelInfos","query","useQuery","parsed","modelInfos","result","minStartAt","models","slice","forEach","modelInfo","mdif","assign","periodIndex","periodsModelReturn","pdr","i","period","periodsIndex","push","modelPeriod","minStartPeriodAt","Date","pidx","startPeriodAtStr","snapDatetime","startPeriodAt","setUTCHours","currentPeriodsModelReturn","currentPeriodModelReturn","currentPeriodReturn","getTime","return","splice","useProfitSharingInfos","selectedInvestorAccount","variables","investorAccountID","skip","Balance","balance","subscription","pctProfitSharing","subscriptionReturn","useQueryBalance","investorAccount","prop","useQueryProfitSharingUnsubscribe","subscriptionID","ProfitSharingRequest","prfShringReq","profitsharingUnsubscribe","profitSharing","BITKUB_ACTIONS","ALL_BITKUB_ACTIONS","useBitkubActionsQuery","currencyToSignalActionsMap","setCurrencyToSignalActionsMap","strategyType","resolution","payload","bitkubActions","actions","responseError","mapper","action","currency","symbol","symbolArr","split","getCurrency","useAllBitkubActionsQuery","currencyToAllSignalActionsMap","setCurrencyToAllSignalActionsMap","BitkubBalance","balances","bitkubPortfolio","allBitkubActions","compare","b","aAction","bAction","actionGroup","currentResolution","currentStrategy","currentLength","placeHolderAction","calculateAt","sort","useBitkubExecutionQuery","executionID","BitkubExecution","bitkubExecution","gridDetail","detail","limitDetail","buyCount","sellCount","currencyPosition","ThbPosition","openOrders","openOrder","side","amount","useBitkubExecutionOrderHistoryQuery","start","toLocaleDateString","end","Data","bitkubOrdersHistory","useBitkubGridReturnQuery","bitkubGridReturn","createTheme","contrastText","dark","white","active","typography","fontFamily","overrides","MuiTooltip","tooltip","MuiFormHelperText","MuiTypography","h6","h5","h4","h3","h2","h1","subtitle1","subtitle2","body1","body2","MuiTabs","indicator","minHeight","minWidth","MuiFormControl","borderTopLeftRadius","borderTopRightRadius","cursor","paddingLeft","paddingRight","transition","marginTop","borderBottom","borderBottomStyle","MuiOutlinedInput","MuiDialog","MuiMenu","MuiButton","contained","MuiButtonGroup","grouped","MuiCard","MuiFormLabel","asterisk","MuiList","responsiveFontSizes","textAlign","Footer","direction","ENABLE_REDUX_LOGGER","GQL_URI","REST_URI","FAQ_URI","MOCK_SECRET_PATH","zeroPad","num","numZeros","n","abs","zeros","toString","zeroString","pow","substr","capitalize","toUpperCase","toLowerCase","setCookie","days","expires","date","setTime","toUTCString","document","cookie","getCookie","nameEQ","ca","c","charAt","substring","indexOf","getBase64Cookie","Buffer","from","eraseCookie","haveEmoji","test","toThaiMonth","monthTH","short","_month","parseInt","dateDiff","startingDate","endingDate","startDate","toISOString","endDate","swap","startYear","getFullYear","daysInMonth","yearDiff","monthDiff","getMonth","dayDiff","getDate","formDateString","toThaiDateFormat","_date","isAfterToday","setHours","makeError","FRONT_INTERNAL","readDefaultBroker","andConditions","conditions","prev","Boolean","randomIntFromInterval","min","random","arrayIntFromZeroToTarget","Array","levenshtein","tmp","row","j","hexToRGB","hex","alpha","g","isMobilePlatform","navigator","userAgent","platform","useProfile","user","DESKTOP_WIDTH","MOBILE_WIDTH","reverse","output","matches","useMediaQuery","up","useWidth","isMobile","isMedium","isLarge","rawLayout","UseQuery","refetcher","me","setStart","pauseCount","localTime","instance","axios","create","withCredentials","Logo","MockToggle","isMock","REACT_APP_MOCK_ENABLE","Chip","reload","BetaChip","isBeta","useRouteManager","brokerNameOnURL","visibility","useModalState","isOpen","setIsOpen","_isOpen","zIndex","drawer","toolbar","link","textDecoration","fontWeightBold","textTransform","linkIcon","marginBottom","selectLanguage","primaryColor","btnLabel","TopBar","openPopup","setOpenPopup","setInitialPopup","isLogin","onClickRegis","onClickLogin","renderMenu","isBitkub","BROKER_INFOS","href","isApproved","Hidden","elevation","appBar","lgUp","Toolbar","flexGrow","mdDown","pr","bottom","left","right","nav","AppBar","profile","isBitkubGuess","useGuess","showAppBar","setShowAppBar","checkScrollSpeed","lastPos","newPos","delta","clear","wrapper","querySelector","scrollTop","clearTimeout","handleScrollEventListener","speed","addEventListener","removeEventListener","getBottomNav","dest","navAction","component","RouterLink","BottomNavigationAction","Paper","BottomNavigation","Adb","showDrawer","contentContainer","content","overflowY","LandingLayout","AuthGuard","render","GuestGuard","routeManager","getRedirectPathname","ApprovedGuard","RedirectDefaultBroker","useCookie","history","useHistory","saveBroker","dfb","COOKIES","latestSelBroker","replace","LoadingScreen","MockGuard","routesConfig","path","guard","routes","exact","layout","renderRoutes","route","Guard","Layout","Component","Routes","SelectBrokerSection","brokers","handleSelectBroker","Container","maxWidth","mb","SigninBrokerSection","signinUsername","signinPasssword","handleSigninData","onSubmit","TabPanel","role","hidden","useMobileUI","closeIcon","top","AddBrokerModal","handleBack","dispatch","useDispatch","addBrokerState","setAddBrokerState","setSigninUsername","singinPassword","setSigninPassword","brokerAvaibles","useMutation","addInvestorAccount","ModalProps","openModal","setDialog","signinParams","username","isAddSuccess","addedBrokerAccount","brokerUsername","messageTh","Header","Loading","dir","Dialog","keepMounted","SwipeableDrawer","onOpen","textBlack","confirmSvg","justifyItems","ModelSubConfirmModal","modalProps","setProps","timeleft","accountId","isSubSuccess","modelName","paddingX","paddingY","textBlackBold","AddBrokerSuccessModal","onComplete","textGrey","DeleteBrokerModal","deleteAccount","forceDelete","openSuccessModal","deleteBrokerSuccessProps","handleDeleteAccount","deleteAccountParams","isSuccess","accountNos","mr","DeleteBrokerSuccessModal","go","renderDeleteSuccess","pt","renderDeleteFail","renderTimerButton","OTPConfirmModal","wrapperHandleClsoe","wrapperHandleBack","sendAgain","CircularProgress","SnackbarModal","snakbarColor","setSnackbarColor","snackbarMessage","setSnackbarMessage","actionType","Grow","ModalProvider","Props","modalState","modal","modalStatus","modalName","backCount","prevPopup","prevModal","addBrokerModal","modelSubConfirmModal","addBrokerSuccessModal","deleteBrokerModal","deleteBrokerSuccessModal","otpConfirmModal","SnakbarModal","snackbarModal","TransitionUP","Slide","header","descriptionLink","greenButton","lineHeight","transButton","zeroStateDialog","pointerEvents","firstStateDialog","iconButton","stateDrawer","zeroStateDrawerContainer","firstStateDrawerContainer","PDPACookie","pdpaAllow","hasConsent","setHasConsent","infoState","setInfoState","handleApprove","handleInfoState","smDown","TransitionComponent","BackdropProps","hideBackdrop","disableScrollLock","disableEnforceFocus","disableAutoFocus","Link","flexWrap","flexBasis","KeyboardArrowDown","mdUp","PlaintLayout","spinnerBox","LoadingWithPlainLayoutScreen","PlainLayout","Auth","addBrokerUsernameToCookie","useBrokerFromCookie","refetch","investor","setUserData","setQueryMe","fullName","ClientMock","MockContent","InvalidBrokerPage","selectedBroker","setSelectedBroker","Brokers","useDark","select","MenuItem","path_l","newPath","join","toBroker","MaintenancePage","NO_BROKER_URL","PUBLIC_PATH_SHORTCUT","MultiBrokerManager","loadingRef","useRef","brokerAllInvalid","setBrokerAllInvalid","isTimeout","setIsTimeout","mapperBrokernameToBroker","handleChangeLoading","switchBroker","fromBrokerName","toBrokerName","fromBrokerID","toBrokerID","search","latestBroker","defaultBroker","isCorrectBroker","isCorrectLatestBroker","isCorrectDefaultBroker","MaintenanceChecker","AxiosMock","exceptUrl_401","makeExceptionURL","httpLink","createHttpLink","uri","credentials","errorLink","onError","graphQLErrors","networkError","authLink","setContext","headers","ApolloLink","concat","client","ApolloClient","cache","InMemoryCache","App","createBrowserHistory","ThemeProvider","ApolloProvider","CssBaseline","GraphQLMock","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","initialState","languageReducer","produce","draft","delete_cookie","accountReducer","LOGIN_REQUEST","LOGIN_SUCCESS","LOGOUT","SILENT_LOGIN","SET_QUERY_ME","queryMe","SET_CURRENT_BROKER","SET_BROKER","opening","modalReducer","SET_DIALOG","status","shift","SET_PHONE","rootReducer","combineReducers","form","formReducer","loggerMiddleware","createLogger","store","preloadedState","middlewares","thunkMiddleware","middlewareEnhancer","composeWithDevTools","applyMiddleware","enhancers","composedEnhancers","compose","createStore","configureStore","ReactDOM","getElementById","SUBSCRIBE_STATE_ENUM","monthLanguage","getThaiMonth","latestSelInves","loggedInBrokerUsername","univalsalLinkCallback","SIGNAL_CONFIGS","mcad","ema","wrapError","logout","setSession","post","res","success","errData","body","newPassword","requestRegisVerifyOTP","settradeRegisteration","bitkubRegisteration","apiKey","apiSecret","changePassword","oldPassword","cfNewPassword","changePhoneNoRequest","changePhoneNumber","newPhoneNo","registerWithPhoneNumber","regisByPhoneNumberGQL","regisProps","token","decodedToken","jwtDecode","accessToken","removeItem","getAccessToken","isValidToken","decoded","exp","currentTime","now","loginWithFB","data_access_expiration_time","sttAuthen","requireRegister","sttRegisRequest","sttRegis","sttURI","get","callbackUri","changeNameURI","addOpenAccount","isAuthenticated","fromID","toID","oldBrokerID","newBrokerID","setBroker","filter","getBrokerNameFromPathname","bkr","brokerParsing","getBrokerName","redirectTo","silenceSwitchBroker","redirect","getModelInfoPathname","modelID","TransitionLeft","TransitionRight","TransitionDown","dialog","iconLeft","iconRight","PopUp","ExitIcon","iconPosition","titleAlign","paperStyle","titleComponent","fullScreen","getTransitions","PaperProps","scroll","clsx","getDefaultBackIcon","alignCenter","alignSelf","isXs","usePrevious","getBrokerUsernameFromCookie","loggedInBrokerUsernamesCookie","loggedInBrokerUsernamesCookieAscii","decodeURIComponent","saveBrokerUsernameToCookie","loggedInBrokerUsernamesString","loggedInBrokerUsernamesStringBase64","encodeURIComponent","brokerUsernameFromCookie","delBrokerUsernameFromCookie","NProgress","done","WhitePopupContext","useTableOverviewContext","SuccessIconSecondary","SuccessIconPrimary","WaitingIconPrimary","AwareIconSecondary","paperDark","paperFullWidth","WhitePopupStore","paparProps","pb","WhitePopupAction","lightSecondary","WhitePopupContent","WhitePopupTitle","belongToUser","investorID","investorId"],"mappings":"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","file":"static/js/main.04c65032.chunk.js","sourcesContent":["import React from \"react\";\n\ninterface SVGProps {\n style?: Object;\n}\n\n// const Template: React.FC = ({ style }) => {\n// \treturn (\n// \t\t//SVG tag (modified so that there is no fill & add style={{fill: fill}} into )\n// \t\tnull\n// \t);\n// };\n\nexport const WaitForApproveIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport const HourGlassAnimated: React.FC = () => {\n return (\n \n {/* */}\n \n \n \n \n \n \n \n\n {/* */}\n \n \n\n \n\n \n \n \n\n {/* */}\n \n {/* */}\n \n \n \n\n {/* */}\n \n {/* */}\n \n {/* */}\n \n {/* */}\n \n \n\n {/* */}\n \n \n \n \n \n \n\n {/* */}\n \n \n \n\n {/* */}\n \n \n \n \n \n );\n};\n\nexport const DepositIcon: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport const WithdrawIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport const DateIcon: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport const SortDown: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport const SortUp: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport const PortfolioIcon: React.FC = ({ style }) => {\n return ;\n};\n\nexport const DollarSignIcon: React.FC = ({ style }) => {\n return ;\n};\n\nexport const PersonIcon: React.FC = ({ style }) => {\n return ;\n};\n\nexport const LogoutIcon: React.FC = ({ style }) => {\n return ;\n};\n\nexport const ModelIcon: React.FC = ({ style }) => {\n return ;\n};\n\nexport const TransactionIcon: React.FC = ({ style }) => (\n \n);\nexport const ActionTrendIcon: React.FC = ({ style }) => (\n \n);\nexport const ActionReversalIcon: React.FC = ({ style }) => (\n \n);\n\nexport const FirePrimary: React.FC = ({ style }) => (\n \"strongBuy\"\n);\n\nexport const FireError: React.FC = ({ style }) => (\n \"strongSell\"\n);\n\nexport const CalculatorIcon: React.FC = ({ style }) => (\n \"calculator\"\n);\n\nexport const DepositScreenIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport const WithdrawSuccessIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport const MainteningIcon = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport const Streaming: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n","import { gql } from \"apollo-boost\";\n\nexport const BALANCE = gql(`\n\tquery balance($investorAccountID: String!) {\n\t\tbalance(investorAccountID: $investorAccountID) {\n\t\t\t__typename\n\t\t\t... on BalanceOutput {\n\t\t\t\tportValue\n\t\t\t\tsubscriptionReturn\n\t\t\t\taccountInformation {\n\t\t\t\t\tcashBalance\n\t\t\t\t\tcreditLimit\n\t\t\t\t\tlineAvailable\n\t\t\t\t}\n\t\t\t\tcurrentPositions {\n\t\t\t\t\tsymbol\n\t\t\t\t\tvolume\n\t\t\t\t\tcostPrice\n\t\t\t\t\tmarketPrice\n\t\t\t\t\tunrealizedPL\n\t\t\t\t\tpctUnrealizedProfit\n\t\t\t\t}\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`);\n\nexport const PORT_VALUE = gql`\n\tquery portValue($investorAccountID: String!) {\n\t\tportValue(investorAccountID: $investorAccountID) {\n\t\t\t__typename\n\t\t\t... on PortValueOutput {\n\t\t\t\tportValue\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const BITKUB_BALANCE = gql(`\n\tquery bitkubPortfolio {\n\t\tbitkubPortfolio {\n\t\t\t__typename\n\t\t\t... on BitkubPortfolioOutput {\n\t\t\t\tportValue\n\t\t\t\ttotalCash\n\t\t\t\tavailableCash\n\t\t\t\tbalances {\n\t\t\t\t\tcurrency\n\t\t\t\t\tavailable\n\t\t\t\t\ttotal\n\t\t\t\t\tvalue\n\t\t\t\t\tlastPrice\n\t\t\t\t}\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`);","export * from './accountActions'\n\nexport * from './languageActions'\n\nexport * from './modalActions'","// export const BROKERS = {\n// settrade : 'settrade',\n// bitkub : 'bitkub',\n// globlex : 'globlex'\n\nimport { exchangeEnum } from \"src/types/local-types\"\n\n// }\nexport const EXCHANGES = {\n bitkub:'BITKUB',\n settrade:'SETTRADE',\n default:'DEFAULT'\n}\n\nexport const BROKERS = {\n settrade : {\n name : \"settrade\",\n model : {\n unit : \"ช่อง\",\n max : 5,\n }, \n url : \"https://www.globlex.co.th/eService/\",\n description : \"คุณสามารถฝากเงินเข้าบัญชี Globlex ผ่านเว็บไซต์\"\n },\n bitkub : {\n name : \"bitkub\",\n model : {\n unit : \"%\",\n max : 10,\n },\n url : \"https://www.bitkub.com/deposit\",\n description : \"คุณสามารถฝากเงินเข้าบัญชีทาง Bitkub ได้เลย\"\n },\n globlex : {\n name : \"globlex\",\n model : {\n unit : \"ช่อง\",\n max : 5,\n },\n url : \"https://www.globlex.co.th/eService/\",\n description : \"คุณสามารถฝากเงินเข้าบัญชี Globlex ผ่านเว็บไซต์\"\n }\n}","import { gql } from 'apollo-boost'\n\nexport const BITKUB_EXECUTIONS = gql`\nquery bitkubExecutions(\n $mode:PlaceOrderMode!\n $includeStop:Boolean!\n) {\n bitkubExecutions(\n mode:$mode\n includeStop:$includeStop\n ) {\n __typename\n ... on BitkubExecutions {\n bitkubExecutions {\n executionID\n investorID\n createdAt\n stopAt\n isRunning\n status\n detail {\n __typename\n ... on Grid {\n symbol\n minPrice\n maxPrice\n numberOrder\n totalInvestment\n openOrders {\n symbol\n id\n hash\n side\n type\n rate\n fee\n credit\n amount\n receive\n parentID\n superID\n createdAt\n }\n }\n ... on Limit {\n pctPlaceOrderBuySlip\n pctPlaceOrderSellSlip\n targets {\n symbol\n isBuy\n value\n isDone\n }\n }\n }\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n\nexport const BITKUB_EXECUTION = gql`\nquery bitkubExecution(\n $executionID:String!\n) {\n bitkubExecution(executionID:$executionID) {\n __typename\n ... on BitkubExecution {\n executionID\n investorID\n stopAt\n isRunning\n status\n detail {\n __typename\n ... on Grid {\n symbol\n minPrice\n maxPrice\n numberOrder\n totalInvestment\n openOrders {\n symbol\n id\n hash\n side\n type\n rate\n fee\n credit\n amount\n receive\n parentID\n superID\n createdAt\n }\n }\n ... on Limit {\n pctPlaceOrderBuySlip\n pctPlaceOrderSellSlip\n targets {\n symbol\n isBuy\n value\n isDone\n }\n }\n }\n }\n ... on Error {\n code\n\t\t\tmessage\n }\n }\n}\n`\n\nexport const CAL_GRID_INFO = gql`\nquery calGridInfo(\n $symbol: String!\n $minPrice: Float!\n $maxPrice: Float!\n $numberOrder: Int!\n $totalInvestment: Float!\n) {\n calGridInfo(input:{\n symbol: $symbol\n minPrice: $minPrice\n maxPrice: $maxPrice\n numberOrder: $numberOrder\n totalInvestment: $totalInvestment\n }) {\n __typename\n ... on CalGridInfo {\n symbol\n currentPrice\n step\n amountPerGrid\n minCash\n minCoin\n minPctProfit\n maxPctProfit\n gridPrices\n minTotalInvestment\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n\nexport const BITKUB_ORDER_HISTORY = gql`\nquery bitkubOrdersHistory(\n $executionID :String!\n $start: Time\n $end: Time\n) {\n bitkubOrdersHistory(\n executionID :$executionID\n start: $start\n end: $end\n ) {\n __typename\n ... on BitkubOrdersHistory {\n orders {\n orderID\n txnID\n executionID\n symbol\n hash\n parentOrderID\n parentOrderHash\n superOrderID\n superOrderHash\n takenByMe\n isMaker\n side\n ordertype\n amount\n rate\n fee\n credit\n matchAt\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n\nexport const BITKUB_GRID_RETURN = gql`\nquery bitkubGridReturn(\n $executionID:String!\n) {\n bitkubGridReturn(executionID:$executionID) {\n __typename\n ... on BitkubGridReturn {\n executionID\n currentPrice\n currentCoin\n averagePrice\n \t\tgridProfit\n floatingPnl\n totalProfit\n }\n ... on Error {\n code\n message\n }\n }\n}\n`","import React, { useState } from 'react';\nimport {\n IconButton,\n InputAdornment,\n makeStyles,\n TextField,\n TextFieldProps\n} from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nconst useStyles = makeStyles((theme) => ({\n root:{},\n iconColor:{\n color:theme.palette.divider\n }\n}));\n\n\nconst CTextField = (props: TextFieldProps) => {\n\n const classes = useStyles();\n const [showPassword,setShowPassword] = useState(false)\n\n\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword);\n };\n\n const handleMouseDownPassword = (event: React.MouseEvent) => {\n event.preventDefault();\n };\n\n if (props.type !== \"password\") return (\n
\n \n {props.children}\n \n
\n )\n\n\n return (\n
\n \n \n {showPassword ? : }\n \n \n \n }}\n >\n {props.children}\n \n
\n )\n}\n\nexport default CTextField;\n","export const TO_ENGLISH = '@language/to-english';\nexport const TO_THAI = '@language/to-thai';\n\n\nexport const toEnglish = () => {\n return (dispatch:any) => dispatch({\n type: TO_ENGLISH,\n });\n}\n\n\nexport const toThai = () => {\n return (dispatch:any) => dispatch({\n type: TO_THAI,\n });\n}","import React from 'react'\n// import Globlex from \"src/components/Logo/brokers/Globlex\";\n\nexport const brokerList = [\n {\n brokerID : process.env.REACT_APP_BROKER_ID || \"ENV\",\n brokerName : process.env.REACT_APP_BROKER_NAME || \"ENV\",\n icon : (\n \n ),\n },\n]\n","import { errorType } from \"src/types/error-types\";\n\nexport class ClientError {\n somethingWentWrong: errorType = {\n __typename: \"Error\",\n code: \"FRT-999\",\n message: \"ระบบขัดข้อง\",\n };\n somethingWentWrongWait1Minute: errorType = {\n __typename: \"Error\",\n code: \"FRT-998\",\n message: \"ระบบขัดข้อง กรุณาลองอีกครั้ง ใน 1 นาที\",\n };\n proxyBlock: errorType = {\n __typename: \"Error\",\n code: \"FRT-997\",\n message: \"คุณดำเนินการถี่เกินไป กรุณาลองอีกครั้ง ใน 1 นาที\",\n };\n connectionWentWrong: errorType = {\n __typename: \"Error\",\n code: \"FRT-996\",\n message: \"การเชื่อมต่อขัดข้อง\",\n };\n phoneNoMustStartWith0: errorType = {\n __typename: \"Error\",\n code: \"FRT-000\",\n message: \"เบอร์โทรศัพท์ต้องเริ่มต้นด้วย 0\",\n };\n swtichBrokerFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-001\",\n message: \"เปลี่ยน broker ไม่สำเร็จ\",\n };\n bitkubRegisFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-002\",\n message: \"สมัคร Finnize สำหรับ Bitkub ไม่สำเร็จ\",\n };\n bitkubApiInvalid: errorType = {\n __typename: \"Error\",\n code: \"CLI-GW-062\",\n message: \"API-key หรือ API-Secret ไม่ถูกต้อง\",\n };\n bitkubBestbidReqFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-003\",\n message: \"ไม่สามารถดึงข้อมูล ticker\",\n };\n bitkubWrongCurrency: errorType = {\n __typename: \"Error\",\n code: \"FRT-004\",\n message: \"สกุลเงิน ไม่ถูกต้อง\",\n };\n loginFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-005\",\n message: \"เข้าสู่ระบบไม่สำเร็จ\",\n };\n requestRegisPhoneNoFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-006\",\n message: \"เริ่มต้นขอสมัครไม่สำเร็จ\",\n };\n missingBrokerID: errorType = {\n __typename: \"Error\",\n code: \"FRT-007\",\n message: \"ไม่พบข้อมูล broker\",\n };\n missingPhoneNo: errorType = {\n __typename: \"Error\",\n code: \"FRT-008\",\n message: \"กรุณาใส่เบอร์โทรศัพท์ของท่าน\",\n };\n invalidPhoneNo: errorType = {\n __typename: \"Error\",\n code: \"FRT-009\",\n message: \"เบอร์โทรศัพท์ไม่ถูกต้อง\",\n };\n requestResetPasswordFail: errorType = {\n __typename: \"Error\",\n code: \"FRT-010\",\n message: \"เริ่มต้นขอรหัสผ่านไม่สำเร็จ\",\n };\n}\n\nconst clientError = new ClientError();\nexport default clientError;\n","import React from 'react'\nimport './index.css'\n\nconst Spinner = () => {\n return (\n
\n
\n
\n
\n
\n )\n}\n\nexport default Spinner","import React from 'react'\nimport './index.css'\n\nconst Roller = () => {\n return (\n
\n
\n
\n
\n
\n )\n}\n\nexport default Roller","import { gql } from \"apollo-boost\";\n\nexport const UPDATE_INVESTOR = gql`\n\tmutation updateInvestor($fullName: String!) {\n\t\tupdateInvestor(input: { fullName: $fullName }) {\n\t\t\t__typename\n\t\t\t... on UpdateInvestorOutput {\n\t\t\t\tinvestorID\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const DELETE_INVESTOR = gql`\n\tmutation deleteInvestor {\n\t\tdeleteInvestor {\n\t\t\t__typename\n\t\t\t... on DeleteInvestorOutput {\n\t\t\t\tinvestorID\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const addInvestorAccountByLogin = gql`\n\tmutation addInvestorAccountByLogin($username: String!, $password: String!) {\n\t\taddInvestorAccountByLogin(\n\t\t\tinput: { username: $username, password: $password }\n\t\t) {\n\t\t\taccountNo\n\t\t\taccountType\n\t\t}\n\t}\n`;\nexport const deleteInvestorAccount = gql`\n\tmutation deleteInvestorAccount($username: String!) {\n\t\tdeleteInvestorAccount(input: { username: $username })\n\t}\n`;\n\nexport const CREATE_INVESTOR_PASSWORD = gql`\n\tmutation createInvestorPassword($password: String!, $cfPassword: String!) {\n\t\tcreateInvestorPassword(\n\t\t\tinput: { password: $password, cfPassword: $cfPassword }\n\t\t) {\n\t\t\t__typename\n\t\t\t... on CreateInvestorPasswordOutput {\n\t\t\t\tinvestorID\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`;\n","import { ApolloError } from \"@apollo/client\";\nimport { errorType } from \"src/types/error-types\";\n\ntype ResponseReducerMode = \"GQL\";\n\nexport type GqlResponseType = {\n errorMessage: string | undefined;\n code: string | undefined;\n data: TData | undefined;\n error?: any;\n};\n\n/**\n * gql response reducer\n * used to reduce gql response to only errorMessage and data\n * @returns\n */\nexport function responseReducer(\n mode: ResponseReducerMode = \"GQL\"\n) {\n function gqlResponse(\n error: errorType | undefined = undefined,\n data: TData | undefined = undefined\n ) {\n return {\n errorMessage: error?.message,\n code: error?.code,\n error: error,\n data,\n } as GqlResponseType;\n }\n\n if (mode === \"GQL\") return gqlResponse;\n return gqlResponse;\n}\n\nexport function getGqlError(err: ApolloError | undefined) {\n if (!err) return undefined;\n const error: any = err.networkError;\n return {\n statusCode: error.statusCode,\n message: err.message,\n name: err.name,\n };\n}\n","import React from 'react'\nimport {\n Button,\n Box,\n Typography,\n makeStyles,\n SvgIcon,\n useTheme,\n} from '@material-ui/core'\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nconst useStyles = makeStyles((theme) => ({\n brokerSelect : {\n width : \"100%\",\n margin : \"16px 0px\"\n },\n title : {\n display:\"flex\",\n alignItems:\"center\",\n }\n}));\n\ninterface expandIconProps {\n onClick?:()=>void\n}\n\nconst ExpandIcon:React.FC = ({onClick}) => {\n const theme = useTheme()\n return (\n \n \n \n )\n}\n\ninterface BrokerCellProps {\n brokerName : string\n brokerID : string\n Icon : any\n handleClickLogin : (brokerName:string,brokerID:string)=>void\n}\n\nconst BrokerCell:React.FC = ({\n brokerName,\n brokerID,\n handleClickLogin,\n Icon,\n}) => {\n const classes = useStyles();\n return (\n \n )\n}\n\nexport default BrokerCell","import React from \"react\";\nimport {\n\tmakeStyles,\n\tBox,\n\tTooltip,\n\tButton,\n\tTypography,\n\tIconButton,\n\tSvgIcon,\n\tDivider,\n\tDrawer,\n} from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport PerfectScrollbar from \"react-perfect-scrollbar\";\n\nimport { PopUp } from \"../BasePopUp\";\n\nimport { brokerList } from \"src/context/brokerList\";\nimport { useLayout } from \"src/utils/customHook\";\nimport BrokerCell from \"./BrokerCell\";\n\nconst useStyles = makeStyles((theme) => ({\n\troot: {},\n\tbrokerSlot: {\n\t\twidth: 96,\n\t\tborder: `1px solid ${theme.palette.divider}`,\n\t\tborderRadius: theme.spacing(1),\n\t\tpadding: \"16px\",\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\tmargin: \"0px 8px\",\n\t},\n\ttextWrap: {\n\t\twhiteSpace: \"nowrap\",\n\t\toverflow: \"hidden\",\n\t\ttextOverflow: \"ellipsis\",\n\t},\n\tmobileDrawer: {\n\t\twidth: 400,\n\t\t[theme.breakpoints.down(\"xs\")]: {\n\t\t\twidth: \"100%\",\n\t\t},\n\t\tbackgroundColor: theme.palette.background.paper,\n\t},\n\ttitle: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t},\n\tclose: {\n\t\tmargin: \"-4px -8px\",\n\t\tcolor: theme.palette.primary.main,\n\t},\n}));\n\ninterface SelectBrokerPopupProps {\n\topen: boolean;\n\tonClose: () => void;\n\tonClickBroker: (brokerName: string, brokerID: string) => void;\n}\n\nconst SelectBrokerPopup: React.FC = ({\n\tonClose,\n\topen,\n\tonClickBroker,\n}) => {\n\tconst classes = useStyles();\n\tconst { isDesktop } = useLayout();\n\n\tif (!isDesktop)\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t onClose()}>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tเลือก Broker สำหรับบัญชีหุ้นของคุณ\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{brokerList.map((broker, index) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{brokerList.map((broker) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tonClickBroker(broker.brokerName, broker.brokerID)\n\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{broker.icon}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{broker.brokerName}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default SelectBrokerPopup;\n","import React, { Suspense } from \"react\";\nimport { BROKERS, EXCHANGES } from \"src/context/constants\";\nimport { useExchange } from \"src/hooks\";\n\n\ninterface RegisterPopUpInterface {\n\topen: boolean;\n\thandleClose: any;\n\thandleSwitch: any;\n}\n\nconst RegisterPopUp: React.FC = ({\n\topen,\n\thandleClose,\n\thandleSwitch,\n}) => {\n\t// const broker = useBroker()\n\tconst exchange = useExchange()\n\n\tconst regiserPopupManager = () => {\n switch(exchange) {\n case EXCHANGES.settrade : return React.lazy(() => import('./settrade'));\n case EXCHANGES.bitkub : return React.lazy(() => import('./bitkub'));\n default : return React.lazy(() => import('./settrade')); \n }\n }\n\n\tconst RegisterMultiBrokerPopup = regiserPopupManager()\n\n\treturn (\n\t\t\n\t\t\t}>\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n};\n\nexport default RegisterPopUp;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core\";\nimport LogInPopUP from \"./LoginPopUp\";\nimport RegisterPopUp from \"./RegisterPopUp\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n}));\n\ninterface AuthPopUpProps {\n open: boolean;\n isLogIn: boolean;\n handleClose: () => void;\n handleSwitch: () => void;\n openForgot: () => void;\n}\n\n\nconst AuthPopUp: React.FC = ({\n open,\n isLogIn,\n handleClose,\n handleSwitch,\n openForgot,\n}) => {\n const classes = useStyles();\n\n return (\n
\n \n \n
\n );\n};\n\nexport default AuthPopUp;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Box, TextField, Button, Tooltip } from \"@material-ui/core\";\n\nimport { NumberFormatCustom } from \"src/utils/NumberFormatCustom\";\n\nimport { PopUp } from \"../../BasePopUp\";\nimport { useLayout, useTimeleft } from \"src/utils/customHook\";\nimport BaseDrawer from \"../../BaseDrawer\";\nimport authService from \"src/services/authService\";\nimport ErrorBox from \"src/components/ErrorBox\";\nimport useRequestResetPassword from \"src/hooks/rest/useRequestResetPassword\";\nimport { clientError } from \"src/context/errors\";\nimport { ERROR_CODE } from \"src/context/constants/errorCode\";\nimport { banOTPErrorType } from \"src/types/error-types\";\n\n// const useStyles = makeStyles((theme) => ({\n// root:{}\n// }));\n\ninterface ForgotPasswordFillPopupProps {\n open: boolean;\n onClose: () => void;\n onSuccess: (phoneNumber: string) => void;\n openLogin?: () => void;\n title?: string;\n brokerID?: string;\n brokerName?: string;\n}\n\nconst ForgotPasswordFillPopup: React.FC = ({\n open,\n onClose,\n openLogin,\n title,\n brokerID,\n brokerName,\n onSuccess,\n}) => {\n const { isSmall } = useLayout();\n const { loading, requestResetPassword } = useRequestResetPassword();\n const { timeLeft, restartCount, resetCount } = useTimeleft(30);\n\n const [phoneNo, setPhoneNo] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setPhoneNo(\"\");\n setErrorMessage(\"\");\n resetCount();\n }\n }, [open]);\n\n const _timeLeftMessage = (timeLeft: number) => {\n const minutes = Math.floor(timeLeft / 60);\n const seconds = timeLeft - 60 * minutes;\n if (minutes > 0) return `${minutes} นาที ${seconds} วินาที`;\n return `${seconds} วินาที`;\n };\n\n const timeLeftMessage = useMemo(() => {\n return _timeLeftMessage(timeLeft);\n }, [timeLeft]);\n\n const isBan = useMemo(() => {\n if (timeLeft > 0) return true;\n return false;\n }, [timeLeft]);\n\n const banErrorCallback = (err: banOTPErrorType) => {\n if (err.code === ERROR_CODE.OTP_BAN) {\n setErrorMessage(\n `กรุณารอ ${_timeLeftMessage(\n err.second\n )} ก่อนรีเซ็ตรหัสผ่านด้วยเบอร์โทรศัพท์นี้อีกครั้ง`\n );\n if (err.second) restartCount(err.second);\n }\n };\n\n const onResetPassword = async () => {\n if (!brokerID) return setErrorMessage(clientError.missingBrokerID.message);\n const data = await requestResetPassword(brokerID, phoneNo);\n if (data.code === ERROR_CODE.OTP_BAN) return banErrorCallback(data.error);\n if (data.errorMessage) return setErrorMessage(data.errorMessage);\n onSuccess(phoneNo);\n };\n\n const onChangePhoneNumber = (value: string) => {\n setPhoneNo(value);\n setErrorMessage(\"\");\n };\n\n const RenderContent = (\n \n \n setErrorMessage(\"\")}\n />\n \n onChangePhoneNumber(e.target.value)}\n InputProps={{\n inputComponent: NumberFormatCustom as any,\n }}\n onKeyPress={(e) => {\n if (e.key === \"Enter\") {\n onResetPassword();\n }\n }}\n />\n \n \n \n \n ส่ง OTP\n \n \n \n \n );\n\n if (isSmall)\n return (\n \n {RenderContent}\n \n );\n\n return (\n \n {RenderContent}\n \n );\n};\n\nexport default ForgotPasswordFillPopup;\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Typography,\n Grid,\n Button,\n} from '@material-ui/core';\nimport { PopUp } from 'src/components/PopUp/BasePopUp';\nimport { useLayout } from 'src/utils/customHook';\nimport BaseDrawer from 'src/components/PopUp/BaseDrawer';\nimport authService from 'src/services/authService';\nimport CTextField from 'src/components/CTextField';\nimport PasswordValidator from 'src/components/PasswordValidator';\n\ntype regisDataType = \"fullname\" | \"password\" | \"CFPassword\" | \"email\" | \"username\";\n\n\ninterface ResetPasswordPopupProps {\n open : boolean\n onClose : ()=>void\n phoneNumber : string\n onSuccess : ()=>void\n title? : string\n brokerName? : string\n brokerID? : string\n}\n\nconst ResetPasswordPopup: React.FC = ({\n onClose,\n open,\n title,\n phoneNumber,\n brokerName,\n brokerID,\n onSuccess,\n}) => {\n const { isSmall } = useLayout();\n\n const [loading,setLoading] = useState(false);\n const [password, setPassword] = useState(\"\");\n const [cfPassword, setCfPssword] = useState(\"\");\n const [passwordValid,setPasswordValid] = useState(false)\n\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n useEffect(()=>{\n if (open) {\n setPassword(\"\")\n setCfPssword(\"\")\n setErrorMessage(\"\")\n setLoading(false)\n }\n },[open])\n\n\n const handleChange = (type: regisDataType, val: string) => {\n setErrorMessage(\"\");\n switch (type) {\n case \"password\" :\n return setPassword(val);\n case \"CFPassword\" :\n return setCfPssword(val);\n default:\n return;\n }\n };\n\n const handleValidate = () =>\n new Promise(async (resolve, reject) => {\n if (password !== cfPassword) reject({ type: \"invalid\", message: \"รหัสผ่านไม่ตรงกัน\" });\n if (!passwordValid) reject({ type: \"invalid\", message: \"กรุณาตรวจสอบรหัสผ่านอีกครั้ง\" });\n resolve(null);\n });\n\n const CFPasswordError = () => {\n return !!cfPassword && (password !== cfPassword)\n }\n\n\n // registeration : regis\n const onResetPassword = async () => {\n try {\n if (!brokerID) return setErrorMessage(\"Please select broker.\")\n await handleValidate();\n await authService.resetPassword(\n password,\n brokerID,\n );\n onSuccess()\n } catch (err) {\n if (err.type === \"invalid\") {\n return setErrorMessage(err.message);\n }\n if (err?.response?.data?.message) {\n return setErrorMessage(err.response.data.message);\n }\n if (err) return setErrorMessage(err);\n }\n };\n\n const RenderContent = (\n \n \n handleChange(\"password\", e.target.value)}\n helperText=\"รหัสผ่านต้องมีอย่างน้อย 8 ตัว\"\n />\n \n setPasswordValid(valid)}\n />\n \n \n handleChange(\"CFPassword\", e.target.value)}\n />\n \n \n {errorMessage}\n \n \n \n \n \n เปลี่ยนรหัสผ่าน\n \n \n \n \n )\n\n if (isSmall) return (\n \n {RenderContent}\n \n )\n\n return (\n \n {RenderContent}\n \n )\n}\n\nexport default ResetPasswordPopup;\n","import React, { useState, useEffect } from \"react\";\nimport { Box, Typography } from \"@material-ui/core\";\n\nimport ForgotPasswordFillPopup from \"./ForgotPasswordFillPopup\";\nimport OTPConfirmPopup from \"src/components/PopUp/PopUpComponents/OTPConfirmPopup\";\nimport ResetPasswordPopup from \"src/components/PopUp/ForgotPasswordPopup/ResetPasswordPopup\";\n\nimport {\n WhitePopup,\n WhitePopupAction,\n} from \"src/components/PopUp/PopUpComponents/WhitePopup\";\nimport CountdownButton from \"src/components/CountdownButton\";\n\ninterface ForgotPasswordPopupInterface {\n open: boolean;\n handleClose: () => void;\n brokerName?: string;\n brokerID?: string;\n openLogin?: () => void;\n}\n\nconst ForgotPasswordPopup: React.FC = ({\n open,\n handleClose,\n brokerName,\n brokerID,\n openLogin,\n}) => {\n const [registerState, setRegisterState] = useState(0);\n const [phoneNumber, setPhoneNumber] = useState(\"\");\n\n useEffect(() => {\n if (open) setRegisterState(0);\n }, [open]);\n\n const onSuccessRequestRegister = (phoneNumber: string) => {\n setPhoneNumber(phoneNumber);\n setRegisterState(1);\n };\n\n const onOtpVerified = () => {\n setRegisterState(2);\n };\n\n const onResetPasswordSuccess = () => {\n setRegisterState(3);\n };\n\n const toHome = () => {\n window.location.pathname = \"/\";\n };\n\n // const onClose = () => {\n // setRegisterState(0)\n // handleClose()\n // }\n\n const onBack = () => {\n setRegisterState(0);\n };\n\n const renderWhitePopupConfirm = (\n \n \n \n เปลี่ยนรหัสผ่านสำเร็จ\n \n \n \n \n \n \n );\n\n return (\n \n {renderWhitePopupConfirm}\n \n \n \n \n );\n};\n\nexport default ForgotPasswordPopup;\n","import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core\";\nimport SelectBrokerPopup from \"../SelectBrokerPopup\";\nimport AuthPopUp from \"../AuthPopUp\";\nimport ForgotPasswordPopup from \"../ForgotPasswordPopup\";\nimport useBroker from \"src/hooks/useBroker\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n}));\n\ntype popupType =\n | \"close\"\n | \"decision\"\n | \"login\"\n | \"regis\"\n | \"forgot\"\n | \"selectBroker\";\n\nconst POPUP = {\n close: \"close\",\n decision: \"decision\",\n login: \"login\",\n regis: \"regis\",\n forgot: \"forgot\",\n selectBroker: \"selectBroker\",\n};\n\ninterface AuthenPopupProps {\n open: boolean;\n onClose: () => void;\n initialPopup?: popupType;\n}\nconst AuthenPopup: React.FC = ({\n open,\n onClose,\n initialPopup,\n}) => {\n const broker = useBroker()?.broker;\n const classes = useStyles();\n\n const [currentPopup, setCurrentPopup] = useState(\"close\");\n\n const [brokerName, setBrokerName] = useState(broker?.name);\n const [brokerID, setBrokerID] = useState(broker?.brokerID);\n\n useEffect(() => {\n if (open) {\n resetState();\n setCurrentPopup(\"decision\");\n }\n\n if (!open) {\n setCurrentPopup(\"close\");\n }\n //eslint-disable-next-line\n }, [open]);\n\n useEffect(() => {\n if (currentPopup === POPUP.decision) {\n if (initialPopup) setCurrentPopup(initialPopup);\n else setCurrentPopup(\"login\");\n }\n }, [currentPopup, brokerID, initialPopup]);\n\n const resetState = () => {\n setCurrentPopup(\"close\");\n setBrokerName(broker?.name);\n setBrokerID(broker?.brokerID);\n };\n\n const handleSwitch = () => {\n if (currentPopup === POPUP.login) setCurrentPopup(\"regis\");\n if (currentPopup === POPUP.regis) setCurrentPopup(\"login\");\n };\n\n const handleClose = () => {\n onClose();\n };\n\n const openInitialPopup = () => {\n if (initialPopup) return setCurrentPopup(initialPopup);\n return setCurrentPopup(\"login\");\n };\n\n const onSelectBroker = (brokerName: string, brokerID: string) => {\n setBrokerName(brokerName);\n setBrokerID(brokerID);\n\n openInitialPopup();\n };\n\n return (\n
\n \n setCurrentPopup(\"forgot\")}\n />\n setCurrentPopup(\"login\")}\n brokerName={brokerName}\n brokerID={brokerID}\n />\n
\n );\n};\n\nexport default AuthenPopup;\n","import { gql } from 'apollo-boost'\n\nexport const BROKERS = gql`\n query brokers {\n brokers{\n __typename\n ... on Brokers {\n brokers {\n brokerID\n name\n exchange\n }\n }\n ... on Error {\n code\n message\n }\n }\n }\n`","import React, {\n createContext,\n useState,\n} from 'react';\nimport _ from 'lodash';\nimport {storeSettings} from 'src/utils/settings';\nimport {\n SettingProp,\n SettingContextProp,\n SettingProviderProp\n} from './types';\n\n\nconst defaultSettings:SettingProp = {\n language: 'TH',\n};\n\n\nconst SettingsContext:React.Context = createContext({\n settings:defaultSettings, \n saveSettings:null\n});\n\n\nexport const SettingsProvider:React.FC = ({settings, children}) => {\n const [currentSettings, setCurrentSettings] = useState(settings || defaultSettings);\n\n const handleSaveSettings = (updateSettings = {}) => {\n const mergedSettings = _.merge({}, currentSettings, updateSettings);\n\n setCurrentSettings(mergedSettings);\n storeSettings(mergedSettings);\n };\n\n return (\n \n {children}\n \n )\n};\n\nexport const SettingsConsumer = SettingsContext.Consumer;\n\nexport default SettingsContext;\n","export const restoreSettings = () => {\n let settings = null;\n\n try {\n const storedData = localStorage.getItem('settings');\n\n if (storedData) {\n settings = JSON.parse(storedData);\n }\n } catch (err) {\n // If stored data is not a strigified JSON this might fail,\n // that's why we catch the error\n }\n\n return settings;\n}\n\nexport const storeSettings = (settings:Object) => {\n localStorage.setItem('settings', JSON.stringify(settings))\n}\n","import { useState } from \"react\";\nimport { clientError } from \"src/context/errors\";\nimport { requestResetPasswordType } from \"src/services/authInterface\";\nimport authService from \"src/services/authService\";\nimport { responseReducer } from \"src/utils/responseReducer\";\n\nconst useRequestResetPassword = () => {\n const resReducer = responseReducer();\n const [loading, setLoading] = useState(false);\n\n const requestResetPassword = async (brokerID: string, phoneNo: string) => {\n try {\n setLoading(true);\n const data = await authService.requestResetPassword(brokerID, phoneNo);\n switch (data.__typename) {\n case \"RequestResetPassword\":\n return resReducer(undefined, data);\n case \"Error\":\n return resReducer(data);\n default:\n return resReducer(clientError.connectionWentWrong);\n }\n } catch {\n return resReducer(clientError.somethingWentWrong);\n } finally {\n setLoading(false);\n }\n };\n\n return {\n requestResetPassword,\n loading,\n };\n};\n\nexport default useRequestResetPassword;\n","export const monthListTH = ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม']\nexport const monthListShortTH = ['ม.ก.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.','ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.']","import { gql } from \"apollo-boost\";\n\nexport const modelInfoSchema = `\n modelID \n name \n modelType \n modeler {\n adminID \n fullName\n avatarURL\n createdAt\n updatedAt\n broker {\n brokerID\n name\n }\n }\n universe \n minPortValue \n pctFlatCommission \n pctProfitSharing \n shortDesc \n longDesc \n videoURL \n svgReturnUrl \n signalType \n signalTriggerType \n signalTriggerParam \n rebalanceType \n rebalanceParam \n createdAt \n updatedAt \n lastSignalDateTime \n periodsModelReturn {\n period\n return\n snapDatetime\n }\n\n`\n\n//modelInfo ...\nexport const MODEL_INFO = gql`\n query modelInfo(\n $modelID: String!\n ) {\n modelInfo(\n modelID: $modelID\n ) {\n __typename\n ... on ModelInfo {\n ${modelInfoSchema}\n }\n ... on Error {\n code\n message\n }\n }\n }\n`\n\n//modelInfos ...\nexport const MODEL_INFOS = gql`\nquery modelInfos {\n modelInfos {\n __typename\n ... on ModelInfos {\n models {\n ${modelInfoSchema}\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n\n\nexport const MODEL_RETURNS = gql`\nquery modelReturns($modelID: String!, $length: String!) {\n modelReturns(modelID: $modelID, length: $length) {\n __typename\n ... on ModelReturns {\n modelReturns {\n date\n pctReturn\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`;\n\nexport const MODEL_SIGNALS = gql`\nquery modelSignals(\n $modelID: String!\n) {\n modelSignals(modelID:$modelID) {\n __typename\n ... on ModelSignals{\n modelSignals{\n symbolInfo{\n symbol\n companyNameTh\n }\n pctWeight\n }\n signalDateTime\n }\n ... on Error {\n code\n message\n }\n }\n}\n`;\n\n\nexport const MODEL_STAT = gql`\nquery modelStat(\n $modelID: String!\n) {\n modelStat(modelID:$modelID) {\n __typename\n ... on ModelStat {\n modelID \n startInitialBacktestDatetime \n endInitialBacktestDatetime \n lastBacktestDatetime\n cagr \n pctWinPerTrade \n std \n pctMaximumDrawdown \n pctAvgProfit \n pctAvgLoss \n sharpeRatio \n }\n ... on Error {\n code\n message\n }\n }\n}\n`;\n\n\nexport const MODEL_MONTHLY_RETURNS = gql`\n query modelMonthlyReturns(\n $modelID: String!,\n $year: Int!\n ) {\n modelMonthlyReturns(modelID:$modelID,year:$year) {\n __typename\n ... on ModelMonthlyReturns {\n modelMonthlyReturns {\n month\n pctReturn\n }\n }\n ... on Error {\n code\n message\n }\n }\n }\n`;","import React, { useEffect, useState } from \"react\";\nimport {\n makeStyles,\n Box,\n Typography,\n IconButton,\n Collapse,\n Fade,\n Grow,\n} from \"@material-ui/core\";\nimport { Cancel } from \"@material-ui/icons\";\nimport { BaseStyleType } from \"src/types/style-types\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n height: \"35px\",\n backgroundColor: \"rgba(239, 120, 120, 0.2)\",\n // padding: \"0px 16px\",\n borderRadius: \"8px\",\n border: \"1px solid #EF7878\",\n },\n IconButton: {\n marginLeft: theme.spacing(1),\n padding: theme.spacing(1),\n marginRight: theme.spacing(-2),\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0)\",\n },\n },\n ErrorIcon: {\n color: \"rgba(253, 120, 121, 1)\",\n fontSize: \"medium\",\n },\n ErrorText: {\n color: theme.palette.secondary.light,\n marginLeft: theme.spacing(2),\n },\n}));\n\ninterface ErrorBoxProps extends BaseStyleType {\n message: string;\n open: boolean;\n onClose?: () => void;\n}\n\nconst ErrorBox: React.FC = ({\n message,\n open,\n onClose,\n className = \"\",\n style,\n}) => {\n const classes = useStyles();\n const [isExpand, setIsExpand] = useState(false);\n\n useEffect(() => {\n if (open) {\n setTimeout(() => {\n setIsExpand(true);\n }, 0);\n }\n }, [open]);\n\n const handleClose = () => {\n setIsExpand(false);\n setTimeout(() => {\n onClose?.();\n }, 300);\n };\n\n if (open === false) return null;\n\n return (\n \n \n \n {onClose && (\n \n \n \n )}\n \n {message}\n \n \n \n \n );\n};\n\nexport default ErrorBox;\n","import {useSelector} from 'react-redux'\n\nconst useBroker = () => {\n const broker = useSelector(state => state.account.broker)\n return broker\n}\n\nexport default useBroker","const track = (...args) => {\n if (process.env.NODE_ENV !== 'production') {\n return;\n }\n\n if (!window.gtag) {\n return;\n }\n\n window.gtag(...args);\n}\n\nconst pageview = (props) => {\n track('config', process.env.REACT_APP_GA_MEASUREMENT_ID, props);\n}\n\nconst event = (type, props) => {\n track('event', type, props);\n}\n\n// eslint-disable-next-line\nexport default {\n pageview,\n event\n};\n","import React, {\n forwardRef,\n useEffect, useCallback\n} from 'react';\nimport { Helmet } from 'react-helmet';\nimport { useLocation } from 'react-router';\nimport track from 'src/utils/analytics';\n\ninterface PageProp {\n\ttitle: string\n children:any\n}\n\nconst Page = forwardRef(({\n title,\n children,\n ...rest\n}, ref) => {\n const location = useLocation();\n\n const sendPageViewEvent = useCallback(() => {\n track.pageview({\n page_path: location.pathname\n });\n }, [location]);\n\n useEffect(() => {\n sendPageViewEvent();\n }, [sendPageViewEvent]);\n\n return (\n \n \n {title}\n \n {children}\n \n );\n});\n\nexport default Page;\n","import React from 'react';\nimport NumberFormat from 'react-number-format';\n\n\nexport interface NumberFormatCustomProps {\n inputRef: (instance: NumberFormat | null) => void;\n onChange: (event: { target: { name: string; value: string } }) => void;\n name: string;\n}\n\nexport function NumberFormatCustom(props: NumberFormatCustomProps) {\n const { inputRef, onChange, ...other } = props;\n\n return (\n {\n onChange({\n target: {\n name: props.name,\n value: values.value,\n },\n });\n }}\n\t\t\tmask=\"_ \"\n />\n );\n}\n","export const BITKUB_MENU_BOT_GRID_DISABLES_KEY = {\n DCA: \"DCA\",\n GRID: \"GRID\",\n};\n","import { BITKUB_MENU_BOT_GRID_DISABLES } from \"src/config\";\nimport { BITKUB_MENU_BOT_GRID_DISABLES_KEY } from \"src/context/constants/bitkub\";\n\nclass EnvManager {\n envs = {\n isMaintenance: \"REACT_APP_IS_MAINTENANCE\",\n isPhoneNoLoginAvailable: \"REACT_APP_PHONE_NO_LOGIN_AVAILABLE\",\n bitkubMenuBotGridDisables: \"REACT_APP_BITKUB_MENU_BOT_DISABLES\",\n isShowRiskFeature: \"REACT_APP_SHOW_RISK_FEATURE\",\n };\n\n isMaintenance() {\n let value = process.env[this.envs.isMaintenance];\n if (value === \"true\") return true;\n return false;\n }\n\n isPhoneNoLoginAvailable() {\n let value = process.env[this.envs.isPhoneNoLoginAvailable];\n if (value === \"true\") return true;\n return false;\n }\n\n get isBitkubBotGridDisabled() {\n return (\n process.env[this.envs.bitkubMenuBotGridDisables]?.includes(\n BITKUB_MENU_BOT_GRID_DISABLES_KEY.GRID\n ) || false\n );\n }\n\n get isBitkubBotDcaDisabled() {\n return (\n process.env[this.envs.bitkubMenuBotGridDisables]?.includes(\n BITKUB_MENU_BOT_GRID_DISABLES_KEY.DCA\n ) || false\n );\n }\n\n get isShowRiskFeature() {\n return process.env[this.envs.isShowRiskFeature] === \"true\" ? true : false;\n }\n}\n\nconst envManager = new EnvManager();\nexport default envManager;\n","import { gql } from \"apollo-boost\";\n\nexport const INVESTOR = gql`\nquery investor {\n\tinvestor {\n\t\t__typename\n\t\t... on InvestorTypeResult{\n\t\t\tinvestor {\n\t\t\t\t__typename\n\t\t\t\t... on Investor {\n\t\t\t\t\tinvestorId\n\t\t\t\t\tbroker {\n\t\t\t\t\t\tbrokerID\n\t\t\t\t\t\tname\n\t\t\t\t\t\texchange\n\t\t\t\t\t}\n\t\t\t\t\tfullName\n\t\t\t\t\tphoneNo\n\t\t\t\t\tisApproved\n\t\t\t\t\tcreatedAt\n\t\t\t\t\tupdatedAt\n\t\t\t\t\thasPassword\n\t\t\t\t}\n\t\t\t\t... on SettradeInvestor {\n\t\t\t\t\tinvestorId\n\t\t\t\t\t broker {\n\t\t\t\t\t\tbrokerID\n\t\t\t\t\t\tname\n\t\t\t\t\t\texchange\n\t\t\t\t\t} \n\t\t\t\t\tbrokerUsername\n\t\t\t\t\tfullName\n\t\t\t\t\tphoneNo\n\t\t\t\t\tisApproved\n\t\t\t\t\tcreatedAt\n\t\t\t\t\tupdatedAt\n\t\t\t\t\thasPassword\n\t\t\t\t}\n\t\t\t\t... on BitkubInvestor {\n\t\t\t\t\tinvestorId\n\t\t\t\t\tbroker {\n\t\t\t\t\t\tbrokerID\n\t\t\t\t\t\tname\n\t\t\t\t\t\texchange\n\t\t\t\t\t}\n\t\t\t\t\tfullName\n\t\t\t\t\tphoneNo\n\t\t\t\t\tisApproved\n\t\t\t\t\tapiKey\n\t\t\t\t\tcreatedAt\n\t\t\t\t\tupdatedAt\n\t\t\t\t\thasPassword\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t... on Error {\n\t\t\tcode\n\t\t\tmessage\n\t\t}\n\t}\n}\n`;\n\n//investors ...\nexport const INVESTORS = gql`\n\tquery investors {\n\t\tinvestors {\n\t\t\t__typename\n\t\t\t... on Investors {\n\t\t\t\tinvestors {\n\t\t\t\t\tinvestorID\n\t\t\t\t\tbroker {\n\t\t\t\t\t\tbrokerID\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t\tbrokerUserID\n\t\t\t\t\tbrokerUserType\n\t\t\t\t\tbrokerUsername\n\t\t\t\t\tfullName\n\t\t\t\t\tisCreatedByAdmin\n\t\t\t\t\tcreatedAt\n\t\t\t\t\tupdatedAt\n\t\t\t\t\tinvestorAccounts {\n\t\t\t\t\t\tinvestorAccountID\n\t\t\t\t\t\taccountNo\n\t\t\t\t\t\taccountType\n\t\t\t\t\t\tsubscription {\n\t\t\t\t\t\t\tsubscriptionID\n\t\t\t\t\t\t\tinvestorAccountID\n\t\t\t\t\t\t\tunsubscribedAt\n\t\t\t\t\t\t\tplaceOrderMode\n\t\t\t\t\t\t\tplaceOrderBuySlip\n\t\t\t\t\t\t\tplaceOrderSellSlip\n\t\t\t\t\t\t\torderExpiryDay\n\t\t\t\t\t\t\tsignalTriggerParam\n\t\t\t\t\t\t\trebalanceParam\n\t\t\t\t\t\t\tpctFlatCommission\n\t\t\t\t\t\t\tpctProfitSharing\n\t\t\t\t\t\t\tcreatedAt\n\t\t\t\t\t\t\tupdatedAt\n\t\t\t\t\t\t\tmodelInfo {\n\t\t\t\t\t\t\t\tmodelID\n\t\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\t\tmodelType\n\t\t\t\t\t\t\t\tmodeler {\n\t\t\t\t\t\t\t\t\tadminID\n\t\t\t\t\t\t\t\t\temail\n\t\t\t\t\t\t\t\t\tfullName\n\t\t\t\t\t\t\t\t\toriginalFullName\n\t\t\t\t\t\t\t\t\tisEmailVerified\n\t\t\t\t\t\t\t\t\tcreatedAt\n\t\t\t\t\t\t\t\t\tupdatedAt\n\t\t\t\t\t\t\t\t\tavatarURL\n\t\t\t\t\t\t\t\t\tbroker {\n\t\t\t\t\t\t\t\t\t\tbrokerID\n\t\t\t\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trole\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tuniverse\n\t\t\t\t\t\t\t\tminPortValue\n\t\t\t\t\t\t\t\tpctFlatCommission\n\t\t\t\t\t\t\t\tpctProfitSharing\n\t\t\t\t\t\t\t\tshortDesc\n\t\t\t\t\t\t\t\tlongDesc\n\t\t\t\t\t\t\t\tvideoURL\n\t\t\t\t\t\t\t\tsvgReturnUrl\n\t\t\t\t\t\t\t\tsignalType\n\t\t\t\t\t\t\t\tsignalTriggerType\n\t\t\t\t\t\t\t\tsignalTriggerParam\n\t\t\t\t\t\t\t\trebalanceType\n\t\t\t\t\t\t\t\trebalanceParam\n\t\t\t\t\t\t\t\tmaxPositionType\n\t\t\t\t\t\t\t\tmaxPositionParam\n\t\t\t\t\t\t\t\tmaxSectorType\n\t\t\t\t\t\t\t\tmaxSectorParam\n\t\t\t\t\t\t\t\tminBuyType\n\t\t\t\t\t\t\t\tminBuyParam\n\t\t\t\t\t\t\t\tminSellType\n\t\t\t\t\t\t\t\tminSellParam\n\t\t\t\t\t\t\t\ttakeProfitType\n\t\t\t\t\t\t\t\ttakeProfitParam\n\t\t\t\t\t\t\t\tstopLossType\n\t\t\t\t\t\t\t\tstopLossParam\n\t\t\t\t\t\t\t\ttrailingStopType\n\t\t\t\t\t\t\t\ttrailingStopParam\n\t\t\t\t\t\t\t\ttimeStopType\n\t\t\t\t\t\t\t\ttimeStopParam\n\t\t\t\t\t\t\t\tcreatedAt\n\t\t\t\t\t\t\t\tupdatedAt\n\t\t\t\t\t\t\t\tisLaunched\n\t\t\t\t\t\t\t\tforInvestor\n\t\t\t\t\t\t\t\tforAdminInvestor\n\t\t\t\t\t\t\t\torderExpiredDays\n\t\t\t\t\t\t\t\tisBacktesting\n\t\t\t\t\t\t\t\tbacktestMessage\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t... on Error {\n\t\t\t\tcode\n\t\t\t\tmessage\n\t\t\t}\n\t\t}\n\t}\n`;\n","import React,{ useState, useEffect } from 'react';\nimport {\n Button,\n makeStyles,\n PropTypes,\n Typography,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n root:{}\n}));\n\nvar timer:any\n\ninterface CountdownButtonProps {\n startCount:boolean\n time:number\n title:string\n onTimeout?:()=>void\n onClick?:()=>void\n color?:PropTypes.Color\n disabled?:boolean\n fullWidth?:boolean\n size?: 'small' | 'medium' | 'large'\n variant?: 'text' | 'outlined' | 'contained'\n textStyle?:any\n}\nconst CountdownButton: React.FC = ({\n startCount,\n color,\n disabled,\n fullWidth,\n size,\n variant,\n time,\n title,\n onTimeout,\n textStyle,\n onClick,\n}) => {\n\n const classes = useStyles();\n const [timeLeft,setTimeLeft] = useState(time)\n\n useEffect(()=>{\n timer = setInterval(()=>{\n if (startCount) {\n setTimeLeft((timeLeft)=>Math.max(timeLeft-1,0))\n }\n },1000)\n return () => {\n clearInterval(timer)\n }\n },[startCount])\n\n useEffect(()=>{\n if (timeLeft <= 0) {\n clearInterval(timer)\n if (onTimeout) onTimeout()\n }\n },[timeLeft,onTimeout])\n\n return (\n
\n \n
\n )\n}\n\nexport default CountdownButton;\n","import {gql} from 'apollo-boost'\n\nexport const SUBSCRIBE = gql`\nmutation subscribe(\n $investorAccountID: String!\n $modelID: String!\n $placeOrderMode: String!\n $placeOrderBuySlip: Int!\n $placeOrderSellSlip: Int!\n $orderExpiryDay: Int!\n $signalTriggerParam: Int\n $rebalanceParam: Int\n) {\n subscribe(input:{\n investorAccountID : $investorAccountID\n modelID: $modelID\n placeOrderMode: $placeOrderMode\n placeOrderBuySlip: $placeOrderBuySlip\n placeOrderSellSlip :$placeOrderSellSlip\n orderExpiryDay: $orderExpiryDay\n signalTriggerParam: $signalTriggerParam\n rebalanceParam: $rebalanceParam\n }) {\n __typename\n ... on SubscribeOutput {\n subscriptionID\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\nexport const PROFITSHARING_UNSUBSCRIBE = gql`\n query profitSharing($subscriptionID: String!) {\n profitsharingUnsubscribe(\n subscriptionID: $subscriptionID\n ) {\n __typename\n ... on ProfitsharingUnsubscribeOutput {\n profitSharing\n }\n __typename\n ... on Error {\n code \n message\n }\n }\n }\n \n`\nexport const UNSUBSCRIBE = gql`\nmutation unsubscribe(\n $subscriptionID: String!\n $isSellAll : Boolean!\n) {\n unsubscribe(input:{\n subscriptionID: $subscriptionID,\n isSellAll : $isSellAll,\n }) {\n __typename\n ... on UnsubscribeOutput {\n subscriptionID\n isDeleted\n }\n ... on Error {\n\t\t\tcode\n message\n }\n }\n}\n`\n\nexport const UPDATE_INVESTOR_SUBSCRIPTION = gql`\nmutation updateInvestorSubscription(\n $subscriptionID: String!\n $placeOrderMode: String!\n $placeOrderBuySlip: Int!\n $placeOrderSellSlip: Int!\n $orderExpiryDay: Int!\n $signalTriggerParam: Int\n $rebalanceParam: Int\n) {\n updateInvestorSubscription(input:{\n subscriptionID: $subscriptionID\n placeOrderMode : $placeOrderMode\n placeOrderBuySlip : $placeOrderBuySlip\n placeOrderSellSlip : $placeOrderSellSlip\n orderExpiryDay : $orderExpiryDay\n signalTriggerParam : $signalTriggerParam\n rebalanceParam : $rebalanceParam\n }) {\n __typename\n ... on UpdateInvestorSubscriptionOutput {\n subscriptionID\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n","export const REBALANCE = {\n month:\"MONTH\",\n week:\"WEEK\",\n day:\"DAY\",\n none:\"NONE\",\n}","import React, { useCallback, useEffect, useState } from \"react\";\n\ninterface PasswordValidatorProps {\n password: string;\n onChangeValid: (valid: boolean) => void;\n}\n\nconst _passwordConstrain = {\n length: false,\n // uppercase: false,\n // lowercase: false,\n // numeric: false,\n // symbol: false,\n};\n\nconst PasswordValidator: React.FC = ({\n password,\n onChangeValid,\n}) => {\n const [passwordConstrain, setPasswordConstrain] =\n useState(_passwordConstrain);\n const [valid, setValid] = useState(false);\n\n const checkPasswordConstrain = (password: string) => {\n setPasswordConstrain({\n length: password.length >= 8,\n // lowercase: haveLowercase(password),\n // numeric: haveNumber(password),\n // symbol: haveSymbol(password),\n // uppercase: haveUppercase(password),\n });\n };\n\n const isValidPassword = useCallback(() => {\n return Object.keys(passwordConstrain).reduce((accu, current) => {\n return (\n accu && passwordConstrain[current as keyof typeof passwordConstrain]\n );\n }, true);\n }, [passwordConstrain]);\n\n useEffect(() => {\n checkPasswordConstrain(password);\n }, [password]);\n\n useEffect(() => {\n setValid(isValidPassword());\n }, [passwordConstrain, isValidPassword]);\n\n useEffect(() => {\n onChangeValid(valid);\n }, [valid, onChangeValid]);\n\n return null\n\n // return (\n //
\n // \n // {/* {`รหัสผ่านต้อง ${errorPassword && `( ${errorPassword} )`}`} */}\n // \n // \n // \n // มีความยาวอย่างน้อย 10 ตัวอักษร\n // \n // \n // \n // \n // \n // มีอักษรภาษาอังกฤษพิมพ์เล็กและพิมพ์ใหญ่ (เช่น A,a)\n // \n // \n // \n // \n // \n // มีตัวเลขอย่างน้อย 1 ตัว (เช่น 1)\n // \n // \n // \n // \n // \n // มีสัญลักษณ์อย่างน้อย 1ตัว (เช่น !)\n // \n // \n // \n //
\n // );\n};\n\nexport default PasswordValidator;\n","import React, { createContext, useContext, Suspense } from \"react\";\nimport { BROKERS, EXCHANGES } from \"src/context/constants\";\nimport { useExchange } from \"src/hooks\";\n\n//context provider ...\ntype ContextProps = {\n open: boolean;\n handleClose: () => void;\n handleSwitch: () => void;\n openForgot?: () => void;\n};\n\n//context provider ...\nconst LoginPopupContext = createContext>({});\n\n//context provider ...\nexport const useLoginPopupContext = () => {\n return useContext(LoginPopupContext);\n};\ninterface LoginPopUpInterface {\n open: boolean;\n handleClose: any;\n handleSwitch: any;\n openForgot?: () => void;\n}\n\nconst LoginPopUp: React.FC = ({\n open,\n handleClose,\n handleSwitch,\n openForgot,\n}) => {\n const exchange = useExchange();\n\n const tableOverviewStore: ContextProps = {\n open: open,\n handleClose: handleClose,\n handleSwitch: handleSwitch,\n openForgot: openForgot,\n };\n\n const loginPopupManager = () => {\n switch (exchange) {\n case EXCHANGES.settrade:\n return React.lazy(() => import(\"./settrade\"));\n case EXCHANGES.bitkub:\n return React.lazy(() => import(\"./bitkub\"));\n default:\n return React.lazy(() => import(\"./settrade\"));\n }\n };\n\n const LoginMultiBrokerPopup = loginPopupManager();\n\n return (\n \n \n }>\n \n \n \n \n );\n};\n\nexport default LoginPopUp;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\n // makeStyles,\n // Dialog,\n Box,\n Typography,\n Button,\n CircularProgress,\n useTheme,\n} from \"@material-ui/core\";\nimport OtpInput from \"react-otp-input\";\nimport { PopUp } from \"../../BasePopUp\";\nimport authService from \"src/services/authService\";\nimport { useLayout, useTimeleft } from \"src/utils/customHook\";\nimport BaseDrawer from \"../../BaseDrawer\";\nimport { banOTPErrorType } from \"src/types/error-types\";\nimport { ERROR_CODE } from \"src/context/constants/errorCode\";\nimport useRequestRegisPhoneNo from \"src/hooks/rest/useRequestRegisPhoneNo\";\nimport useRequestResetPassword from \"src/hooks/rest/useRequestResetPassword\";\n\ntype ConfirmType = \"requestRegisPhoneNo\" | \"requestResetPassword\";\n\ninterface OTPConfirmPopupProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n phoneNumber?: string;\n brokerID?: string;\n onSuccess?: () => void;\n onFail?: () => void;\n onBack?: () => void;\n confirmType?: ConfirmType;\n}\n\nvar timer: any = undefined;\nconst OTP_INTERVAL = 30;\n\nconst OTPConfirmPopup: React.FC = ({\n onClose,\n open,\n title,\n phoneNumber,\n brokerID,\n onSuccess,\n onFail,\n onBack,\n confirmType = \"requestRegisPhoneNo\",\n}) => {\n const theme = useTheme();\n const { isSmall } = useLayout();\n const { requestRegisPhoneNo } = useRequestRegisPhoneNo();\n const { requestResetPassword } = useRequestResetPassword();\n const [loading, setLoading] = useState(false);\n const [otp, setOtp] = useState(\"\");\n const [otpError, setOtpError] = useState(false);\n const { timeLeft, restartCount } = useTimeleft(OTP_INTERVAL);\n\n const stopTimer = () => {\n clearInterval(timer);\n };\n\n const timeLeftMessage = useMemo(() => {\n const minutes = Math.floor(timeLeft / 60);\n const seconds = timeLeft - 60 * minutes;\n if (minutes > 0) return `${minutes} นาที ${seconds} วินาที`;\n return `${seconds} วินาที`;\n }, [timeLeft]);\n\n const banErrorCallback = (err: banOTPErrorType) => {\n if (err.code === ERROR_CODE.OTP_BAN) {\n if (err.second) restartCount(err.second);\n }\n };\n\n useEffect(() => {\n if (open) {\n setOtp(\"\");\n setOtpError(false);\n restartCount(OTP_INTERVAL);\n setLoading(false);\n }\n return () => {\n stopTimer();\n };\n // eslint-disable-next-line\n }, [open]);\n\n const handleOTPChange = (otp: string) => {\n setOtp(otp);\n setOtpError(false);\n };\n\n const onClickSendAgain = async () => {\n try {\n setLoading(true);\n if (!brokerID) return;\n if (!phoneNumber) return;\n switch (confirmType) {\n case \"requestRegisPhoneNo\":\n const regisPhoneNoData = await requestRegisPhoneNo(\n brokerID,\n phoneNumber\n );\n if (regisPhoneNoData.code === ERROR_CODE.OTP_BAN)\n return banErrorCallback(regisPhoneNoData.error);\n return restartCount(OTP_INTERVAL);\n case \"requestResetPassword\":\n const resetPasswordData = await requestResetPassword(\n brokerID,\n phoneNumber\n );\n if (resetPasswordData.code === ERROR_CODE.OTP_BAN)\n return banErrorCallback(resetPasswordData.error);\n return restartCount(OTP_INTERVAL);\n default:\n return;\n }\n } finally {\n setLoading(false);\n }\n };\n\n const verifyOTP = async () => {\n try {\n setOtpError(false);\n setLoading(true);\n await authService.verifyOTP(otp);\n setLoading(false);\n if (onSuccess) await onSuccess();\n // onClose();\n } catch (err) {\n setOtpError(true);\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (otp.length === 4) verifyOTP();\n // eslint-disable-next-line\n }, [otp]);\n const renderDonotAccept = (\n <>\n \n ไม่ได้รับข้อความ OTP ?\n \n 0 || loading}\n onClick={onClickSendAgain}\n style={{ paddingTop: 0, paddingBottom: 0 }}\n >\n ส่งอีกครั้ง\n \n \n );\n const renderEnterOTP = (\n <>\n \n ไม่ได้รับข้อความ OTP ? สามารถส่งอีกครั้งใน{\" \"}\n {`${timeLeftMessage}`}{\" \"}\n \n \n );\n\n const RenderOtp = (\n <>\n \n \n \n }\n isInputNum={true}\n hasErrored={otpError}\n isDisabled={loading}\n />\n \n \n {otpError && (\n \n \n รหัส OTP ไม่ถูกต้องโปรดลองใหม่\n \n \n )}\n \n {timeLeft > 0 ? renderEnterOTP : renderDonotAccept}\n \n \n {loading && }\n \n \n );\n\n if (isSmall)\n return (\n \n {RenderOtp}\n \n );\n\n return (\n \n {RenderOtp}\n \n );\n};\n\nexport default OTPConfirmPopup;\n","import { useQuery } from '@apollo/client';\nimport { useMemo } from 'react'\nimport { MODEL_INFOS } from 'src/graphql/queries/model';\nimport { modelInfoPeriodsIndex, modelInfosQuery, modelInfoType, periodModelReturnPeriodType, periodModelReturnType } from 'src/types/model-types';\n\nconst modelPeriods:Array = ['1M','3M','6M','1Y','3Y','5Y','10Y']\n\ninterface minstarttAtType {\n [x:string] : Date\n}\n\nconst useModelInfos = () => {\n const query = useQuery(MODEL_INFOS);\n\n const parsed = useMemo(()=>{\n if (query.data?.modelInfos?.__typename === \"ModelInfos\") {\n let result:Array = []\n let target:Array = []\n let minStartAt:minstarttAtType = {}\n let modelInfos = query.data.modelInfos.models.slice()\n\n //periodIndexing ... \n modelInfos.forEach((modelInfo)=>{\n let mdif = Object.assign({},modelInfo)\n const periodIndex:modelInfoPeriodsIndex = {}\n mdif.periodsModelReturn.forEach((pdr,i) => {\n periodIndex[pdr.period] = i\n })\n mdif.periodsIndex = periodIndex\n result.push(mdif)\n })\n\n //filter wrong start period ...\n modelPeriods.forEach((modelPeriod)=>{\n let minStartPeriodAt = new Date()\n\n //minStartPeriodAt ...\n result.forEach((model)=>{\n let pidx = model.periodsIndex?.[modelPeriod]\n if (pidx !== null && pidx !== undefined) {\n let startPeriodAtStr = model.periodsModelReturn[pidx].snapDatetime\n if (startPeriodAtStr) {\n let startPeriodAt = new Date(startPeriodAtStr)\n startPeriodAt.setUTCHours(0,0,0,0)\n if (startPeriodAt < minStartPeriodAt) minStartPeriodAt = startPeriodAt\n }\n }\n })\n\n minStartAt = {\n ...minStartAt,\n [modelPeriod] : minStartPeriodAt\n }\n })\n\n //remove return if start is less than max ...\n result.forEach((model)=>{\n let currentPeriodsModelReturn = model.periodsModelReturn.slice()\n\n modelPeriods.forEach((modelPeriod) => {\n let pidx = model.periodsIndex?.[modelPeriod]\n let currentPeriodModelReturn:periodModelReturnType \n let minStartPeriodAt = minStartAt[modelPeriod]\n\n if (pidx !== null && pidx !== undefined) {\n\n let currentPeriodReturn = model.periodsModelReturn[pidx]\n let startPeriodAtStr = currentPeriodReturn.snapDatetime\n let startPeriodAt = new Date(startPeriodAtStr)\n startPeriodAt.setUTCHours(0,0,0,0)\n\n //startAt after minStartAt so this case cant compare\n if (startPeriodAt.getTime() > minStartPeriodAt.getTime()) {\n currentPeriodModelReturn = {\n period : currentPeriodReturn.period,\n return : null,\n snapDatetime : currentPeriodReturn.snapDatetime\n }\n } else {\n currentPeriodModelReturn = {\n period : currentPeriodReturn.period,\n return : currentPeriodReturn.return,\n snapDatetime : currentPeriodReturn.snapDatetime\n }\n }\n\n currentPeriodsModelReturn.splice(pidx,1,currentPeriodModelReturn)\n }\n })\n let mdif:modelInfoType = {\n ...model,\n periodsModelReturn : currentPeriodsModelReturn\n }\n target.push(mdif)\n })\n\n return target\n } \n return []\n },[query.data])\n\n return {\n ...query,\n modelInfos : parsed\n }\n}\n\nexport default useModelInfos","import { useQuery } from '@apollo/client';\r\nimport { useMemo } from 'react'\r\nimport { investorAccountType } from 'src/types/investor-account-types';\r\nimport { balanceQuery } from 'src/types/balance-types';\r\nimport { BALANCE } from 'src/graphql/queries/balance';\r\n\r\nconst useProfitSharingInfos = (selectedInvestorAccount:investorAccountType | null | undefined) => {\r\n\r\n const { data: Balance, loading: BalanceLoading } = useQuery(BALANCE, {\r\n variables: { investorAccountID : selectedInvestorAccount?.investorAccountID || \"\" },\r\n skip: !selectedInvestorAccount?.investorAccountID,\r\n }\r\n );\r\n\r\n const balance = useMemo(() => {\r\n if (Balance?.balance?.__typename === \"BalanceOutput\") return Balance.balance;\r\n return undefined;\r\n }, [Balance]);\r\n\r\n const modelInfo = selectedInvestorAccount?.subscription?.modelInfo;\r\n const isProfitSharing = useMemo(() => {\r\n if (!modelInfo) return false;\r\n if (!balance) return false;\r\n const profit = modelInfo.pctProfitSharing * balance?.subscriptionReturn;\r\n return profit > 0;\r\n }, [modelInfo, Balance])\r\n\r\n return isProfitSharing\r\n}\r\n\r\nexport default useProfitSharingInfos","import { useMemo } from 'react'\nimport { useQuery } from \"@apollo/client\";\nimport { BALANCE } from \"src/graphql/queries/balance\";\nimport { balanceQuery } from \"src/types/balance-types\";\nimport { investorAccountType } from \"src/types/investor-account-types\";\n\nconst useQueryBalance = (investorAccount:investorAccountType | undefined | null) => {\n const { data: Balance , ...prop } = useQuery(BALANCE, {\n\t\tvariables: {\n\t\t\tinvestorAccountID: investorAccount?.investorAccountID,\n\t\t},\n\t\tskip: !investorAccount?.investorAccountID,\n\t});\n\n\t//cache ...\n\tconst balance = useMemo(() => {\n\t\tif (Balance?.balance?.__typename === \"BalanceOutput\") {\n\t\t\treturn Balance.balance;\n\t\t} else return undefined;\n\t}, [Balance]);\n\n return {\n ...prop,\n data:balance,\n }\n}\n\nexport default useQueryBalance","import { useMemo } from 'react'\nimport { useQuery } from \"@apollo/client\"\nimport { PROFITSHARING_UNSUBSCRIBE } from \"src/graphql/mutations/subscription\"\nimport { investorAccountType } from \"src/types/investor-account-types\"\nimport { profitsharingUnsubscribeQuery } from \"src/types/subscription-types\"\n\nconst useQueryProfitSharingUnsubscribe = (investorAccount:investorAccountType | undefined | null) => {\n const {data : ProfitSharingRequest, ...query} = useQuery(PROFITSHARING_UNSUBSCRIBE, {\n\t\tvariables : {\n\t\t\tsubscriptionID : investorAccount?.subscription?.subscriptionID,\n\t\t},\n skip : !investorAccount?.subscription?.subscriptionID\n\t})\n\n const profitSharingRequest = useMemo(() => {\n\t\tconst prfShringReq = ProfitSharingRequest?.profitsharingUnsubscribe\n\t\tif(prfShringReq?.__typename === \"ProfitsharingUnsubscribeOutput\") return prfShringReq.profitSharing\n return undefined\n\t},[ProfitSharingRequest])\n\n const profitSharingRequestError = useMemo(()=>{\n const prfShringReq = ProfitSharingRequest?.profitsharingUnsubscribe\n\t\tif(prfShringReq?.__typename === \"Error\") return prfShringReq\n return undefined\n },[ProfitSharingRequest])\n\n return {\n data:profitSharingRequest,\n error:profitSharingRequestError,\n query,\n }\n}\n\nexport default useQueryProfitSharingUnsubscribe","import { gql } from 'apollo-boost'\n\nexport const BITKUB_ACTIONS = gql`\nquery bitkubActions(\n $strategyType: StrategyType!\n\t$resolution: Resolution!\n) {\n bitkubActions(\n strategyType : $strategyType\n resolution : $resolution\n ) {\n __typename\n ... on BitkubActionsOutPut {\n actions {\n symbol\n strategyType\n resolution\n action\n calculateAt\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`\n\nexport const ALL_BITKUB_ACTIONS = gql`\nquery allBitkubActions {\n allBitkubActions {\n __typename\n ... on AllBitkubActionsOutPut {\n actions {\n strategyType\n resolution\n actions {\n symbol\n strategyType\n resolution\n action\n calculateAt\n }\n }\n }\n ... on Error {\n code\n message\n }\n }\n}\n`","import { useEffect, useMemo, useState } from 'react'\nimport { useQuery } from \"@apollo/client\"\nimport { bitkubActionResolutionType, bitkubActionsQuery, bitkubActionStrategyType, currencyToSignalActionsMapType } from 'src/types/bitkub-action-types'\nimport { BITKUB_ACTIONS } from 'src/graphql/queries/bitkubAction'\n\ninterface hookProps {\n strategyType : bitkubActionStrategyType\n resolution : bitkubActionResolutionType\n}\n\nconst useBitkubActionsQuery = (props:hookProps) => {\n const [currencyToSignalActionsMap,setCurrencyToSignalActionsMap] = useState({});\n const {data, ...query} = useQuery(BITKUB_ACTIONS, {\n\t\tvariables : props,\n skip : !props.strategyType || !props.resolution\n\t})\n\n const getCurrency = (symbol:string) => {\n try {\n let symbolArr = symbol.split(\"_\")\n if (symbolArr[0] === \"THB\") return symbolArr[1]\n if (symbolArr[1] === \"THB\") return symbolArr[0]\n return \"UNK\"\n } catch(_) {\n return \"UNK\"\n }\n }\n\n const response = useMemo(() => {\n\t\tconst payload = data?.bitkubActions\n\t\tif(payload?.__typename === \"BitkubActionsOutPut\") return payload.actions\n return []\n\t},[data])\n\n const responseError = useMemo(()=>{\n const payload = data?.bitkubActions\n\t\tif(payload?.__typename === \"Error\") return payload\n return undefined\n },[data])\n\n useEffect(()=>{\n let mapper:currencyToSignalActionsMapType = {}\n response.forEach((action)=>{\n let currency = getCurrency(action.symbol)\n mapper[currency] = action\n })\n setCurrencyToSignalActionsMap(mapper)\n },[response])\n\n return {\n data:response,\n error:responseError,\n currencyToSignalActionsMap:currencyToSignalActionsMap,\n query,\n }\n}\n\nexport default useBitkubActionsQuery","import { useEffect, useMemo, useState } from 'react'\nimport { useQuery } from \"@apollo/client\"\nimport { allBitkubActionsQuery, bitkubActionResolutionType, bitkubActionStrategyType, bitkubActionType, currencyToAllSignalActionsMapType } from 'src/types/bitkub-action-types'\nimport { ALL_BITKUB_ACTIONS, BITKUB_ACTIONS } from 'src/graphql/queries/bitkubAction'\nimport { bitkubBalanceType, bitkubPortfolioQuery } from 'src/types/balance-types'\nimport { BITKUB_BALANCE } from 'src/graphql/queries/balance'\n\ninterface hookProps {\n\n}\n\nconst useAllBitkubActionsQuery = () => {\n const [currencyToAllSignalActionsMap,setCurrencyToAllSignalActionsMap] = useState({});\n const { data:BitkubBalance } = useQuery(BITKUB_BALANCE)\n const {data, ...query} = useQuery(ALL_BITKUB_ACTIONS)\n\n const balances = useMemo(()=>{\n if (BitkubBalance?.bitkubPortfolio?.__typename === \"BitkubPortfolioOutput\") {\n return BitkubBalance.bitkubPortfolio.balances\n }\n },[BitkubBalance])\n\n const response = useMemo(() => {\n\t\tconst payload = data?.allBitkubActions\n\t\tif(payload?.__typename === \"AllBitkubActionsOutPut\") return payload.actions\n return []\n\t},[data])\n\n const responseError = useMemo(()=>{\n const payload = data?.allBitkubActions\n\t\tif(payload?.__typename === \"Error\") return payload\n return undefined\n },[data])\n\n const compare = (a:bitkubActionType,b:bitkubActionType) => {\n\n let aAction = a.action === undefined ? -3 : a.action\n let bAction = b.action === undefined ? -3 : b.action\n\n if (aAction < bAction) return 1\n if (aAction > bAction) return -1\n\n return 0\n\n\n }\n\n const getCurrency = (symbol:string) => {\n try {\n let symbolArr = symbol.split(\"_\")\n if (symbolArr[0] === \"THB\") return symbolArr[1]\n if (symbolArr[1] === \"THB\") return symbolArr[0]\n return \"UNK\"\n } catch(_) {\n return \"UNK\"\n }\n }\n\n useEffect(()=>{\n let mapper:currencyToAllSignalActionsMapType = {}\n\n if (balances) {\n response.forEach((actionGroup,index)=>{\n let currentResolution = actionGroup.resolution\n let currentStrategy = actionGroup.strategyType\n let currentLength = index+1\n\n actionGroup.actions.forEach((action)=>{\n let currency = getCurrency(action.symbol)\n if (currency in mapper) {\n mapper[currency].push(action)\n } \n else {\n mapper[currency] = [action]\n }\n })\n\n balances.forEach((balance)=>{\n let currency = balance.currency\n let placeHolderAction = {\n action:undefined,\n calculateAt:\"\",\n resolution:currentResolution,\n strategyType:currentStrategy,\n symbol:`${currency}_THB`\n }\n if (currency in mapper) {\n if (mapper[currency].length !== currentLength) {\n mapper[currency].push(placeHolderAction)\n }\n } else {\n mapper[currency] = [placeHolderAction]\n }\n })\n })\n \n Object.keys(mapper).map((key)=>{\n mapper[key] = mapper[key].sort(compare)\n })\n \n setCurrencyToAllSignalActionsMap(mapper)\n }\n },[response,balances])\n\n return {\n data:response,\n error:responseError,\n currencyToAllSignalActionsMap:currencyToAllSignalActionsMap,\n query,\n }\n}\n\nexport default useAllBitkubActionsQuery","import { useQuery } from \"@apollo/client\"\nimport { useMemo } from \"react\"\nimport { BITKUB_EXECUTION } from \"src/graphql/queries/bitkubExecution\"\nimport { bitkubExecutionQuery } from \"src/types/bitkub-execution-types\"\n\ninterface hookProps {\n executionID?:string\n}\n\nconst useBitkubExecutionQuery = (props:hookProps) => {\n const { data:BitkubExecution,...query } = useQuery(BITKUB_EXECUTION,{\n variables:{\n executionID:props.executionID\n },\n skip: props.executionID === \"\"\n })\n\n const data = useMemo(()=>{\n if (BitkubExecution?.bitkubExecution?.__typename === \"BitkubExecution\") {\n return BitkubExecution.bitkubExecution\n }\n },[BitkubExecution])\n\n const gridDetail = useMemo(()=>{\n if (data?.detail.__typename === \"Grid\") {\n return data.detail\n }\n },[data])\n\n const limitDetail = useMemo(()=>{\n if (data?.detail.__typename === \"Limit\") {\n return data.detail\n }\n },[data])\n\n const error = useMemo(()=>{\n if (BitkubExecution?.bitkubExecution?.__typename === \"Error\") {\n return BitkubExecution.bitkubExecution\n }\n },[BitkubExecution])\n\n const [buyCount,sellCount,currencyPosition,ThbPosition] = useMemo(()=>{\n let buyCount = 0;\n let sellCount = 0;\n let currencyPosition = 0;\n let ThbPosition = 0;\n\n gridDetail?.openOrders.forEach((openOrder)=>{\n if (openOrder.side === \"SELL\") {\n sellCount = sellCount+1\n currencyPosition = currencyPosition + openOrder.amount\n }\n if (openOrder.side === \"BUY\") {\n buyCount = buyCount+1\n ThbPosition = ThbPosition + openOrder.amount\n }\n })\n\n return [buyCount,sellCount,currencyPosition,ThbPosition]\n\n },[gridDetail])\n\n return {\n data,\n gridDetail,\n limitDetail,\n buyCount,\n sellCount,\n currencyPosition,\n ThbPosition,\n error,\n query\n }\n\n}\n\nexport default useBitkubExecutionQuery","import { useQuery } from \"@apollo/client\"\nimport { useMemo } from \"react\"\nimport { BITKUB_ORDER_HISTORY } from \"src/graphql/queries/bitkubExecution\"\nimport { bitkubOrderHistoryQuery, bitkubOrdersHistoryInputType } from \"src/types/bitkub-execution-types\"\n\ninterface hookProps {\n executionID?:string\n start?:string\n end?:string\n}\n\nconst useBitkubExecutionOrderHistoryQuery = (props:hookProps) => {\n const { data:Data,...query } = useQuery(BITKUB_ORDER_HISTORY,{\n variables:{\n executionID:props.executionID,\n start: props.start ? (new Date(props.start)).toLocaleDateString('fr-ca') : undefined,\n end:props.end ? (new Date(props.end)).toLocaleDateString('fr-ca') : undefined,\n\n } as bitkubOrdersHistoryInputType,\n skip: props.executionID === \"\"\n })\n\n const data = useMemo(()=>{\n if (Data?.bitkubOrdersHistory?.__typename === \"BitkubOrdersHistory\") {\n return Data.bitkubOrdersHistory\n }\n },[Data])\n\n const error = useMemo(()=>{\n if (Data?.bitkubOrdersHistory?.__typename === \"Error\") {\n return Data.bitkubOrdersHistory\n }\n },[Data])\n\n return {\n data,\n error,\n query\n }\n\n}\n\nexport default useBitkubExecutionOrderHistoryQuery","import { useQuery } from \"@apollo/client\"\nimport { useMemo } from \"react\"\nimport { BITKUB_GRID_RETURN } from \"src/graphql/queries/bitkubExecution\"\nimport { bitkubGridReturnInputType, bitkubGridReturnQuery } from \"src/types/bitkub-execution-types\"\n\ninterface hookProps {\n executionID?:string\n}\n\nconst useBitkubGridReturnQuery = (props:hookProps) => {\n const { data:Data,...query } = useQuery(BITKUB_GRID_RETURN,{\n variables:{\n executionID:props.executionID\n } as bitkubGridReturnInputType,\n skip: props.executionID === \"\"\n })\n\n const data = useMemo(()=>{\n if (Data?.bitkubGridReturn?.__typename === \"BitkubGridReturn\") {\n return Data.bitkubGridReturn\n }\n },[Data])\n\n const error = useMemo(()=>{\n if (Data?.bitkubGridReturn?.__typename === \"Error\") {\n return Data.bitkubGridReturn\n }\n },[Data])\n\n return {\n data,\n error,\n query\n }\n\n}\n\nexport default useBitkubGridReturnQuery","import { useState } from \"react\";\nimport { clientError } from \"src/context/errors\";\nimport { requestRegisPhoneNoType } from \"src/services/authInterface\";\nimport authService from \"src/services/authService\";\nimport { responseReducer } from \"src/utils/responseReducer\";\n\nconst useRequestRegisPhoneNo = () => {\n const resReducer = responseReducer();\n const [loading, setLoading] = useState(false);\n\n const requestRegisPhoneNo = async (brokerID: string, phoneNo: string) => {\n try {\n setLoading(true);\n const data = await authService.requestRegisPhoneNo(brokerID, phoneNo);\n setLoading(false);\n\n switch (data.__typename) {\n case \"RequestRegisPhoneNo\":\n return resReducer(undefined, data);\n case \"Error\":\n return resReducer(data);\n default:\n return resReducer(clientError.connectionWentWrong);\n }\n } catch {\n setLoading(false);\n return resReducer(clientError.somethingWentWrong);\n }\n };\n\n return {\n requestRegisPhoneNo,\n loading,\n };\n};\n\nexport default useRequestRegisPhoneNo;\n","import { responsiveFontSizes } from \"@material-ui/core\";\nimport { createTheme } from \"@material-ui/core/styles\";\n\ndeclare module \"@material-ui/core/styles/createPalette\" {\n interface Palette {\n white: Palette[\"primary\"];\n active: Palette[\"primary\"];\n }\n interface PaletteOptions {\n white: PaletteOptions[\"primary\"];\n active: PaletteOptions[\"primary\"];\n }\n}\n\nlet theme = createTheme({\n palette: {\n type: \"dark\",\n primary: {\n main: \"#19B586\",\n contrastText: \"#030C15\",\n dark: \"#009966\",\n },\n secondary: {\n main: \"#EB5757\",\n dark: \"#A43C3C\",\n light: \"#EF7878\",\n contrastText: \"#030C15\",\n },\n background: {\n default: \"#141719\",\n // default: \"#141818\",\n paper: \"#1A2226\",\n // paper: \"#212729\",\n },\n text: {\n primary: \"#FFFFFF\",\n secondary: \"#C1C1C1\",\n },\n white: {\n main: \"#FFFFFF\",\n },\n active: {\n main: \"#FFB400\",\n },\n },\n typography: {\n fontFamily: \"NotoSan\",\n // fontFamily: \"\",\n },\n});\n\ntheme = createTheme(theme, {\n overrides: {\n MuiTooltip: {\n tooltip: {\n fontSize: 12,\n },\n },\n MuiFormHelperText: {\n root: {\n // fontWeight:600,\n fontSize: 13,\n // letterSpacing:0.5,\n // fontFamily:\"Helvetica\",\n },\n },\n MuiTypography: {\n h6: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n h5: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n h4: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n h3: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n h2: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n h1: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n subtitle1: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n subtitle2: {\n fontFamily: \"NotoSanThai, NotoSan\",\n },\n body1: {\n fontFamily: \"NotoSerifThai, NotoSerif, NotoSan\",\n },\n body2: {\n fontFamily: \"NotoSerifThai, NotoSerif, NotoSan\",\n },\n },\n MuiTabs: {\n indicator: {\n backgroundColor: \"#19B586\",\n color: \"#19B586\",\n },\n root: {\n minHeight: \"40px\",\n minWidth: \"60px\",\n padding: \"0 8px\",\n borderColor: \"#19B586\",\n borderWidth: \"1px\",\n borderStyle: \"none none none none\",\n },\n },\n MuiFormControl: {\n root: {\n \"& .MuiFilledInput-root\": {\n border: `1px solid`,\n borderColor: () =>\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.23)\"\n : \"rgba(255, 255, 255, 0.23)\",\n borderRadius: 20,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n backgroundColor: \"transparent\",\n \"&:hover\": {\n borderColor: theme.palette.text.primary,\n backgroundColor: \"transparent\",\n },\n \"&.Mui-error\": {\n borderColor: \"#f44336 !important\",\n },\n \"&.Mui-disabled\": {\n backgroundColor: \"transparent\",\n borderColor: () =>\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.23)\"\n : \"rgba(255, 255, 255, 0.23)\",\n cursor: \"default\",\n \"&:hover\": {\n borderColor: () =>\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.23)\"\n : \"rgba(255, 255, 255, 0.23)\",\n },\n },\n \"& .MuiFilledInput-input\": {\n padding: \"27px 12px 10px\",\n },\n \"& .MuiFilledInput-inputAdornedStart\": {\n paddingLeft: \"0\",\n },\n \"& .MuiFilledInput-inputAdornedEnd\": {\n paddingRight: \"0\",\n },\n \"&.Mui-focused\": {\n borderWidth: 2,\n backgroundColor: \"transparent\",\n borderColor: theme.palette.primary.main,\n \"& .MuiFilledInput-input\": {\n padding: \"26px 11px 9px\",\n },\n },\n \"&.Mui-focused.MuiFilledInput-adornedStart\": {\n paddingLeft: \"11px\",\n \"& .MuiFilledInput-input.MuiFilledInput-inputAdornedStart\": {\n padding: \"26px 11px 9px 0px\",\n },\n },\n \"& .MuiInputAdornment-positionEnd\": {\n transition: \"margin 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\n },\n \"&.Mui-focused .MuiInputAdornment-positionEnd\": {\n marginTop: \"16px\",\n },\n \"&.Mui-focused.MuiFilledInput-adornedEnd\": {\n paddingRight: \"11px\",\n \"& .MuiFilledInput-input.MuiFilledInput-inputAdornedEnd\": {\n padding: \"26px 0px 9px 11px\",\n },\n },\n \"&.Mui-focused.MuiFilledInput-adornedStart.MuiFilledInput-adornedEnd\":\n {\n \"& .MuiFilledInput-input.MuiFilledInput-inputAdornedStart.MuiFilledInput-inputAdornedEnd\":\n {\n padding: \"26px 0px 9px 0px\",\n },\n },\n },\n \"& .MuiInputLabel-filled.MuiInputLabel-shrink + .MuiFilledInput-root\": {\n \"& .MuiInputAdornment-positionEnd\": {\n marginTop: \"16px\",\n },\n },\n \"& .MuiFilledInput-underline\": {\n \"&:after\": {\n borderBottom: \"none\",\n },\n \"&.Mui-disabled:before\": {\n borderBottomStyle: \"none\",\n },\n \"&:before\": {\n borderBottom: \"none\",\n },\n \"&:hover:before\": {\n borderBottom: \"none\",\n },\n },\n },\n },\n MuiOutlinedInput: {\n root: {\n borderRadius: 20,\n },\n },\n MuiDialog: {\n paper: {\n borderRadius: 20,\n },\n },\n MuiMenu: {\n paper: {\n borderRadius: 20,\n // backgroundColor:\"#25292b\"\n // boxShadow: \"rgba(0, 0, 0, 0.25) 0px 14px 28px, rgba(0, 0, 0, 0.22) 0px 10px 10px\",\n },\n },\n MuiButton: {\n contained: {\n fontWeight: 600,\n backgroundColor: \"#19B586\",\n \"&:hover\": {\n backgroundColor: \"#117E5D\",\n },\n },\n root: {\n fontWeight: 600,\n borderRadius: \"20px\",\n },\n },\n MuiButtonGroup: {\n grouped: {\n borderRadius: 20,\n },\n },\n MuiCard: {\n root: {\n borderRadius: 20,\n },\n },\n MuiFormLabel: {\n asterisk: {\n // color:'red'\n },\n },\n MuiList: {\n root: {\n borderRadius: 20,\n },\n },\n },\n});\n\ntheme = responsiveFontSizes(theme);\n\nexport default theme;\n","import React from 'react';\nimport {\n makeStyles,\n Typography,\n Grid\n} from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n root:{\n backgroundColor : theme.palette.background.default,\n textAlign:\"center\",\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n }\n}));\n\nconst Footer: React.FC = () => {\n\n const classes = useStyles();\n return (\n
\n \n © 2021 Finnize, Inc. All rights reserved\n \n
\n )\n}\n\nexport default Footer;\n","// or get from process.env.REACT_APP_{var} to handle PROD and DEV environments\nexport const APP_VERSION: string = \"2.0.0\";\nexport const API_BASE_URL: string = \"/api\";\nexport const ENABLE_REDUX_LOGGER: boolean = false;\n\nexport const GQL_URI =\n process.env.REACT_APP_GRAPHQL_ENDPOINT || \"http://localhost:8081/query\";\nexport const REST_URI =\n process.env.REACT_APP_REST_ENDPOINT || \"http://localhost:8081\";\n\nexport const FAQ_URI =\n process.env.REACT_APP_FAQ_ENDPOINT || \"https://localhost:1337/graphql\";\nexport const MOCK_SECRET_PATH = \"80c0e67ee3c745c081142a061ff6389c\";\n\nexport const BITKUB_MENU_BOT_GRID_DISABLES: Array = JSON.parse(\n process.env.REACT_APP_BITKUB_MENU_BOT_DISABLES || \"[]\"\n);\n","import { monthListShortTH, monthListTH } from \"src/context/constants/datetime\";\nimport { ERROR_CODE } from \"src/context/constants/errorCode\";\nimport { errorType } from \"src/types/error-types\";\n\nexport function validateEmail(email: string) {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n}\n\nexport function zeroPad(num: number, numZeros: number) {\n var n = Math.abs(num);\n var zeros = Math.max(0, numZeros - Math.floor(n).toString().length);\n var zeroString = Math.pow(10, zeros).toString().substr(1);\n if (num < 0) {\n zeroString = \"-\" + zeroString;\n }\n\n return zeroString + n;\n}\n\nexport const capitalize = (val: string | undefined) => {\n if (val) {\n return val[0].toUpperCase() + val.slice(1).toLowerCase();\n } else return \"\";\n};\n\nexport const copyToClipboard = (content: any) => {\n const el = document.createElement(\"textarea\");\n el.value = content;\n document.body.appendChild(el);\n el.select();\n document.execCommand(\"copy\");\n document.body.removeChild(el);\n};\n\nexport const isEmailValid = (email: string) => {\n return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(\n email\n );\n};\n\nexport function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0,\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function isObjEquivalent(a: any, b: any) {\n // Create arrays of property names\n var aProps = Object.getOwnPropertyNames(a);\n var bProps = Object.getOwnPropertyNames(b);\n\n // If number of properties is different,\n // objects are not equivalent\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (var i = 0; i < aProps.length; i++) {\n var propName = aProps[i];\n\n // If values of same property are not equal,\n // objects are not equivalent\n if (a[propName] !== b[propName]) {\n return false;\n }\n }\n\n // If we made it this far, objects\n // are considered equivalent\n return true;\n}\n\nexport function setCookie(name: string, value: any, days: number) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n}\nexport function getCookie(name: string) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(\";\");\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n}\n\nexport const getBase64Cookie = (name: string) => {\n name = Buffer.from(name).toString(\"base64\");\n name = name.slice(0, 8) + name.slice(-4);\n\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(\";\");\n var value = \"\";\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n value = c.substring(nameEQ.length, c.length);\n return Buffer.from(value, \"base64\").toString(\"ascii\");\n }\n }\n return null;\n};\n\nexport function eraseCookie(name: string) {\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n}\n\nexport const haveEmoji = (text: string) => {\n if (!text) return false;\n // const emojiMatch = text.match(/\\p{Emoji}/gu)\n // if (!emojiMatch) return false\n // return emojiMatch.length > 0\n const alphabetRegex = /^[a-z|A-Z|0-9|ก-ฮ|\\u0E2F-\\u0E3A|\\u0E3F-\\u0E5B|\\s]+$/;\n return !alphabetRegex.test(text);\n // return (/(?:[\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614-\\u2615\\u2618\\u261D\\u2620\\u2622-\\u2623\\u2626\\u262A\\u262E-\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665-\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B-\\u269C\\u26A0-\\u26A1\\u26AA-\\u26AB\\u26B0-\\u26B1\\u26BD-\\u26BE\\u26C4-\\u26C5\\u26C8\\u26CE-\\u26CF\\u26D1\\u26D3-\\u26D4\\u26E9-\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763-\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|(?:\\uD83C[\\uDC04\\uDCCF\\uDD70-\\uDD71\\uDD7E-\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01-\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50-\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96-\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F-\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95-\\uDD96\\uDDA4-\\uDDA5\\uDDA8\\uDDB1-\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB-\\uDEEC\\uDEF0\\uDEF3-\\uDEF6]|\\uD83E[\\uDD10-\\uDD1E\\uDD20-\\uDD27\\uDD30\\uDD33-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4B\\uDD50-\\uDD5E\\uDD80-\\uDD91\\uDDC0]))/.test(text))\n};\n\nexport const haveLowercase = (text: string) => {\n if (!text) return false;\n return /[a-z]/.test(text);\n};\n\nexport const haveUppercase = (text: string) => {\n if (!text) return false;\n return /[A-Z]/.test(text);\n};\n\nexport const haveNumber = (text: string) => {\n if (!text) return false;\n return /[0-9]/.test(text);\n};\n\nexport const haveSymbol = (text: string) => {\n if (!text) return false;\n return /[_\\W]/.test(text);\n};\n\nexport const toThaiMonth = (monthTH: string | number, short?: boolean) => {\n let _month = 0;\n if (!monthTH && monthTH !== 0) return \"\";\n if (typeof monthTH === \"string\") _month = parseInt(monthTH);\n if (typeof monthTH === \"number\") _month = monthTH;\n if (_month < 0 || _month > 12) return \"\";\n return short ? monthListShortTH[_month] : monthListTH[_month];\n};\n\nexport const dateDiffInDay = (_startDate: Date, _endDate: Date) => {\n if (!_startDate) return 0;\n if (!_endDate) return 0;\n const duration = Math.abs(_endDate.getTime() - _startDate.getTime());\n return Math.ceil(duration / (24 * 3600 * 1000));\n};\n\nexport const dateDiffInMonth = (_startDate: Date, _endDate: Date) => {\n if (!_startDate) return 0;\n if (!_endDate) return 0;\n var d1Y = _startDate.getFullYear();\n var d2Y = _endDate.getFullYear();\n var d1M = _startDate.getMonth();\n var d2M = _endDate.getMonth();\n\n return d2M + 12 * d2Y - (d1M + 12 * d1Y);\n};\n\nexport const dateDiffInYear = (_startDate: Date, _endDate: Date) => {\n if (!_startDate) return 0;\n if (!_endDate) return 0;\n var d1Y = _startDate.getFullYear();\n var d2Y = _endDate.getFullYear();\n\n return d2Y - d1Y;\n};\n\n// export const dateDiff = (_startDate:string,_endDate:string) => {\n// if (!_startDate) return \"\"\n// if (!_endDate) return \"\"\n// const startDate = new Date(_startDate)\n// const endDate = new Date(_endDate)\n// const day = dateDiffInDay(startDate,endDate)\n// const month = dateDiffInMonth(startDate,endDate)\n// const year = dateDiffInYear(startDate,endDate)\n\n// return `${day} วัน ${month%12} เดือน ${year} ปี`\n// }\n\nexport const dateDiff = (startingDate: string, endingDate: string) => {\n var startDate = new Date(new Date(startingDate).toISOString().substr(0, 10));\n if (!endingDate) {\n endingDate = new Date().toISOString().substr(0, 10); // need date in YYYY-MM-DD format\n }\n var endDate = new Date(endingDate);\n if (startDate > endDate) {\n var swap = startDate;\n startDate = endDate;\n endDate = swap;\n }\n var startYear = startDate.getFullYear();\n var february =\n (startYear % 4 === 0 && startYear % 100 !== 0) || startYear % 400 === 0\n ? 29\n : 28;\n var daysInMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n var yearDiff = endDate.getFullYear() - startYear;\n var monthDiff = endDate.getMonth() - startDate.getMonth();\n if (monthDiff < 0) {\n yearDiff--;\n monthDiff += 12;\n }\n var dayDiff = endDate.getDate() - startDate.getDate();\n if (dayDiff < 0) {\n if (monthDiff > 0) {\n monthDiff--;\n } else {\n yearDiff--;\n monthDiff = 11;\n }\n dayDiff += daysInMonth[startDate.getMonth()];\n }\n\n // return yearDiff + 'Y ' + monthDiff + 'M ' + dayDiff + 'D';\n // return `${dayDiff} วัน ${monthDiff%12} เดือน ${yearDiff} ปี`\n let formDateString = \"\";\n if (yearDiff > 0) formDateString += `${yearDiff} ปี`;\n if (monthDiff % 12 > 0) formDateString += ` ${monthDiff % 12} เดือน`;\n if (monthDiff % 12 === 0 && yearDiff === 0)\n formDateString += `${dayDiff} วัน`;\n if (monthDiff % 12 === 0 && yearDiff === 0 && dayDiff === 0)\n formDateString += `${dayDiff} วัน`;\n return formDateString;\n};\n\nexport const toThaiDateFormat = (_date: string, short?: boolean) => {\n if (!_date) return \"\";\n const date = new Date(_date);\n if (short)\n return `${date.getDate()} ${toThaiMonth(date.getMonth(), true)} ${\n date.getFullYear() + 543\n }`;\n return `${date.getDate()} ${toThaiMonth(date.getMonth())} ปี ${\n date.getFullYear() + 543\n }`;\n};\n\nexport const toThaiTimeFormat = (_date: string, isCountup?: boolean) => {\n if (!_date) return \"\";\n const date = new Date(_date);\n if (isCountup) {\n var countDownDate = date.getTime();\n var x = setInterval(function () {\n var now = new Date().getTime();\n\n var distance = countDownDate - now;\n\n var days = Math.floor(distance / (1000 * 60 * 60 * 24));\n var hours = Math.floor(\n (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\n );\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n return `${days} วัน ${hours} ชั่วโมง ${minutes} นาที ${seconds} วินาที`;\n if (distance < 0) {\n clearInterval(x);\n }\n }, 1000);\n }\n return `${date.getDate()} วัน ${date.getHours()} ชั่วโมง ${date.getMinutes()} นาที ${date.getSeconds()} วินาที`;\n};\n\nexport const isAfterToday = (_date: string) => {\n if (!_date) return false;\n const startRunDate = new Date(_date).setHours(0, 0, 0, 0);\n const today = new Date().setHours(0, 0, 0, 0);\n if (startRunDate > today) return true;\n return false;\n};\n\nexport const makeError = (message: string = \"\", code: string = \"\") => {\n const error: errorType = {\n __typename: \"Error\",\n message: message || \"พบข้อผิดพลาด กรุณาลองใหม่อีกครั้ง\",\n code: code || ERROR_CODE.FRONT_INTERNAL,\n };\n return error;\n};\n\nexport async function sha256(message: string) {\n // encode as UTF-8\n const msgBuffer = new TextEncoder().encode(message);\n\n // hash the message\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", msgBuffer);\n\n // convert ArrayBuffer to Array\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n // convert bytes to hex string\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n return hashHex;\n}\n\nexport function readDefaultBroker() {\n return process.env.REACT_APP_BROKER_NAME;\n}\n\nexport function andConditions(...conditions: any[]) {\n return conditions.reduce((prev, current) => prev && Boolean(current), true);\n}\n\nexport function randomIntFromInterval(min: number, max: number) {\n // min and max included\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\nexport function arrayIntFromZeroToTarget(target: number) {\n // min and max included\n return Array.from(Array(target).keys());\n}\n\nexport function fullnameWrapper(fullname: string) {\n let name = fullname.split(\" \");\n if (name.length === 2)\n return `${capitalize(name[0])} ${name[1][0].toUpperCase()}.`;\n return fullname;\n}\n\nexport function levenshtein(a: string, b: string) {\n if (a.length == 0) return b.length;\n if (b.length == 0) return a.length;\n\n // swap to save some memory O(min(a,b)) instead of O(a)\n if (a.length > b.length) {\n var tmp = a;\n a = b;\n b = tmp;\n }\n\n var row = [];\n // init the row\n for (var i = 0; i <= a.length; i++) {\n row[i] = i;\n }\n\n // fill in the rest\n for (var i = 1; i <= b.length; i++) {\n var prev = i;\n for (var j = 1; j <= a.length; j++) {\n var val;\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n val = row[j - 1]; // match\n } else {\n val = Math.min(\n row[j - 1] + 1, // substitution\n prev + 1, // insertion\n row[j] + 1\n ); // deletion\n }\n row[j - 1] = prev;\n prev = val;\n }\n row[a.length] = prev;\n }\n\n return row[a.length];\n}\n\nexport function hexToRGB(hex: string, alpha: number) {\n var r = parseInt(hex.slice(1, 3), 16),\n g = parseInt(hex.slice(3, 5), 16),\n b = parseInt(hex.slice(5, 7), 16);\n\n if (alpha) {\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n } else {\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n}\n\nhexToRGB(\"#FF0000\", 0.5);\n\nexport const getCurrency = (symbol: string | undefined) => {\n try {\n if (symbol) {\n let symbolArr = symbol.split(\"_\");\n if (symbolArr[0] === \"THB\") return symbolArr[1];\n if (symbolArr[1] === \"THB\") return symbolArr[0];\n return \"UNK\";\n }\n return \"UNK\";\n } catch (_) {\n return \"UNK\";\n }\n};\n\nexport const isMobilePlatform = () => {\n return (\n /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||\n /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform)\n );\n // return true;\n};\n\nexport const getTextValueRepresentColor = (val?: number) => {\n if (!val) return \"textSecondary\";\n if (val > 0) return \"primary\";\n if (val < 0) return \"secondary\";\n return \"textPrimary\";\n};\n\nexport const getTextValueBuySellColor = (side?: string) => {\n if (!side) return \"textSecondary\";\n if (side.toLowerCase() === \"buy\") return \"primary\";\n if (side.toLowerCase() === \"sell\") return \"secondary\";\n return \"textPrimary\";\n};\n\nexport function placeCaretAtEnd(el: any) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n //@ts-ignore\n } else if (typeof document.body.createTextRange != \"undefined\") {\n //@ts-ignore\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n}\n\nexport const timeFreqLabel = (timeFreq: string | undefined) => {\n if (!timeFreq) return \" - \";\n\n const timeValue = timeFreq.slice(0, -1);\n const timeUnit = timeFreq[timeFreq.length - 1];\n\n switch (timeUnit) {\n case \"m\":\n return `${timeValue} นาที`;\n case \"h\":\n return `${timeValue} ชั่วโมง`;\n case \"d\":\n return `${timeValue} วัน`;\n default:\n return \" - \";\n }\n};\n","// import { useState, useEffect } from 'react';\nimport { useSelector, StateProps } from 'react-redux';\n\nfunction useProfile() {\n const account = useSelector((state:StateProps) => state.account);\n return account.user\n}\n\nexport default useProfile","import { useMemo } from 'react'\n\nimport {\n useMediaQuery,\n useTheme,\n} from '@material-ui/core';\n\nconst DESKTOP_WIDTH = ['md','lg','xl']\nconst MOBILE_WIDTH = ['xs','sm',]\n\nfunction useWidth() {\n const theme = useTheme();\n const keys = [...theme.breakpoints.keys].reverse();\n return (\n keys.reduce((output:any, key:any) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const matches = useMediaQuery(theme.breakpoints.up(key));\n return !output && matches ? key : output;\n }, null) || \"xs\"\n );\n }\n\nfunction useLayout() {\n const theme = useTheme();\n const allWidth = [...theme.breakpoints.keys] as const\n const width:typeof allWidth[number] = useWidth();\n\n const isDesktop = useMemo(()=>{\n return DESKTOP_WIDTH.includes(width)\n },[width])\n\n const isMobile = useMemo(()=>{\n return MOBILE_WIDTH.includes(width)\n },[width])\n\n const [isSmall,isMedium,isLarge] = useMemo(()=>{\n switch(width) {\n case \"xs\" : return [true,false,false]\n case \"sm\" : return [false,true,false]\n case \"md\" : return [false,true,false]\n case \"lg\" : return [false,false,true]\n case \"xl\" : return [false,false,true]\n default : return [false,false,false]\n }\n },[width])\n\n return ({\n isDesktop : isDesktop,\n isMobile : isMobile,\n rawLayout : width,\n isSmall : isSmall,\n isMedium : isMedium,\n isLarge : isLarge,\n })\n \n}\n\nexport default useLayout","// import { useState, useEffect } from 'react';\nimport { useSelector, StateProps } from 'react-redux';\n\nfunction UseQuery() {\n const account = useSelector((state:StateProps) => state.account);\n return account.refetcher.me\n}\n\nexport default UseQuery","import { useEffect, useState } from 'react';\n\nvar timer:any\n\ninterface useTimeleftProps {\n onTimeout?:()=>void\n}\n\nfunction useTimeleft(time:number,props?:useTimeleftProps) {\n\n const [timeLeft,setTimeLeft] = useState(0)\n const [start,setStart] = useState(false)\n\n useEffect(()=>{\n if (start) {\n timer = setInterval(()=>{\n if (start) {\n setTimeLeft((timeLeft)=>Math.max(timeLeft-1,0))\n }\n },1000)\n }\n if (!start) {\n clearInterval(timer)\n }\n return () => {\n clearInterval(timer)\n }\n },[start])\n\n useEffect(()=>{\n if (timeLeft <= 0) {\n clearInterval(timer)\n if (start) {\n setStart(false)\n if (props && props.onTimeout) props.onTimeout()\n }\n }\n // eslint-disable-next-line\n },[timeLeft,props])\n\n const startCount = () => {\n setStart(true)\n }\n\n const pauseCount = () => {\n setStart(false)\n }\n\n const resetCount = () => {\n setStart(false)\n setTimeLeft(0)\n }\n\n const restartCount = (localTime?:number) => {\n setStart(true)\n if (localTime) setTimeLeft(localTime)\n else setTimeLeft(time)\n }\n\n return ({\n timeLeft:timeLeft,\n startCount:startCount,\n pauseCount:pauseCount,\n resetCount:resetCount,\n restartCount:restartCount,\n })\n}\n\nexport default useTimeleft","import axios from \"axios\";\n\nexport const instance = axios.create({\n // baseURL : REST_ENDPOINT,\n withCredentials: true,\n});\n\nexport default instance;\n","import React from \"react\";\n\nconst Logo = () => {\n return (\n \n );\n};\n\nexport default Logo;\n","import React from 'react';\nimport {\n Chip,\n makeStyles,\n useTheme,\n} from '@material-ui/core';\nimport { getCookie, setCookie, eraseCookie } from 'src/utils/utils';\n\nconst useStyles = makeStyles((theme) => ({\n root:{}\n}));\n\ninterface MockToggleProps {\n\n}\nconst MockToggle: React.FC = () => {\n\n const classes = useStyles();\n const theme = useTheme();\n const isMock = getCookie(\"useMock\");\n\n if (process.env.REACT_APP_MOCK_ENABLE !== \"true\") return null\n\n const toggleMock = () => {\n if (isMock === \"true\") eraseCookie(\"useMock\")\n else setCookie(\"useMock\",\"true\",100)\n window.location.reload()\n }\n\n return (\n
\n \n
\n )\n}\n\nexport default MockToggle;\n","import React, { useEffect, useState } from \"react\";\nimport { Chip, makeStyles, Tooltip, useTheme } from \"@material-ui/core\";\nimport { getCookie, setCookie, eraseCookie } from \"src/utils/utils\";\nimport useRouteManager from \"src/utils/customHook/useRouteManager\";\nimport { useProfile } from \"src/utils/customHook\";\nimport { BROKERS } from \"src/context/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n}));\n\ninterface MockToggleProps {}\nconst BetaChip: React.FC = () => {\n const classes = useStyles();\n const theme = useTheme();\n const [isBeta, setIsBeta] = useState(false);\n const { brokerNameOnURL } = useRouteManager();\n\n // useEffect(()=>{\n // if (brokerNameOnURL?.toLowerCase() === BROKERS.bitkub.name) setIsBeta(true)\n // },[brokerNameOnURL])\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default BetaChip;\n","import { useCallback, useState } from \"react\";\n\ntype Returns = [boolean, () => void, () => void, (v: boolean) => void];\n\nconst useModalState = () => {\n const [isOpen, setIsOpen] = useState(false);\n\n const onOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const onClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const onChangeOpen = useCallback((_isOpen: boolean) => {\n setIsOpen(_isOpen);\n }, []);\n\n return [isOpen, onOpen, onClose, onChangeOpen] as Returns;\n};\n\nexport default useModalState;\n","import React, { useMemo, useState, Fragment } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport {\n AppBar,\n Box,\n Button,\n Hidden,\n Toolbar,\n Tooltip,\n makeStyles,\n Typography,\n useTheme,\n Divider,\n} from \"@material-ui/core\";\nimport { ArrowDropDown } from \"@material-ui/icons\";\nimport Logo from \"src/components/Logo\";\n\nimport { useSelector } from \"react-redux\";\n\nimport MockToggle from \"src/components/MockToggle\";\nimport AuthenPopup from \"src/components/PopUp/AuthenPopup\";\nimport BrokerSelector from \"src/components/BrokerSelector\";\nimport BetaChip from \"src/components/BetaChip\";\nimport { BROKERS as BROKER_INFOS } from \"src/context/constants/brokerInfo\";\nimport useModalState from \"src/hooks/useModalState\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: \"inherit\",\n zIndex: theme.zIndex.drawer + 100,\n paddingTop: \"10px\",\n },\n toolbar: {\n height: 40,\n },\n link: {\n textDecoration: \"none\",\n fontWeight: theme.typography.fontWeightBold,\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n textTransform: \"none\",\n },\n linkIcon: {\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n marginTop: theme.spacing(1),\n },\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n selectLanguage: {\n color: theme.palette.text.primary,\n border: theme.spacing(0),\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n start: {\n padding: \"8px 20px\",\n color: \"black\",\n borderRadius: 4,\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n primaryColor: {\n color: theme.palette.primary.main,\n },\n btnLabel: {\n fontFamily: \"NotoSanThai\",\n },\n}));\n\nconst TopBar: React.FC = () => {\n const classes = useStyles();\n const [openPopup, setOpenPopup] = useState(false);\n const [initialPopup, setInitialPopup] = useState<\"login\" | \"regis\">(\"login\");\n const [openBotTrade, onOpenBotTrade, onCloseBotTrade] = useModalState();\n\n const account = useSelector((state) => state.account);\n\n const theme = useTheme();\n\n const isLogin = useMemo(() => {\n return !!account.user;\n }, [account]);\n\n const onClickRegis = (e: any) => {\n setOpenPopup(true);\n setInitialPopup(\"regis\");\n };\n\n const onClickLogin = (e: any) => {\n setOpenPopup(true);\n setInitialPopup(\"login\");\n };\n\n const handleClose = () => {\n setOpenPopup(false);\n };\n\n const renderMobileTopBar = () => {\n return (\n \n \n \n \n \n \n \n\n \n {!isLogin && (\n \n )}\n \n {/* */}\n \n \n );\n };\n\n const renderDesktopGuest = () => {\n return (\n <>\n \n \n \n \n สมัคร\n \n \n \n );\n };\n\n const renderMenu = () => {\n const isBitkub =\n account.user?.broker.name.toLowerCase() === BROKER_INFOS.bitkub.name;\n return (\n <>\n {isBitkub ? (\n // \n \n ) : (\n // \n \n )}\n \n {!isBitkub && account.user?.isApproved && (\n \n )}\n \n );\n };\n\n const renderDesktopAuth = () => {\n return (\n <>\n \n {renderMenu()}\n \n \n );\n };\n\n const renderDesktopTopBar = () => {\n return (\n \n \n \n \n \n \n \n \n \n {isLogin ? renderDesktopAuth() : renderDesktopGuest()}\n {/* \n */}\n \n \n );\n };\n\n const appBarElevation = (): number => {\n return 0;\n };\n\n const appBarStyle = (): any => {\n var style: any = {\n zIndex: theme.zIndex.appBar,\n backgroundColor: theme.palette.background.default,\n };\n return style;\n };\n\n return (\n \n \n \n {renderMobileTopBar()}\n {renderDesktopTopBar()}\n \n \n );\n};\nexport default TopBar;\n","import React, { useEffect, useState } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport {\n ModelIcon,\n PersonIcon,\n PortfolioIcon,\n TransactionIcon,\n} from \"src/components/CustomSVG\";\nimport {\n Paper,\n BottomNavigation,\n BottomNavigationAction,\n makeStyles,\n Hidden,\n} from \"@material-ui/core\";\nimport { useProfile } from \"src/utils/customHook\";\nimport { BROKERS } from \"src/context/constants\";\nimport { useGuess } from \"src/hooks\";\nimport AuthenPopup from \"src/components/PopUp/AuthenPopup\";\nimport { Adb } from \"@material-ui/icons\";\nimport { BROKERS as BROKER_INFOS } from \"src/context/constants/brokerInfo\";\n\nconst BAR_HEIGHT = 64;\nconst SCROLL_SPEED_THRESHOLD = 20;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.default,\n position: \"fixed\",\n bottom: 0,\n left: 0,\n right: 0,\n transition: \"transform 0.2s\",\n },\n nav: {\n height: `${BAR_HEIGHT}px`,\n },\n}));\n\nconst AppBar = () => {\n const classes = useStyles();\n const profile = useProfile();\n const { isBitkubGuess } = useGuess();\n const [showAppBar, setShowAppBar] = useState(true);\n const [openPopup, setOpenPopup] = useState(false);\n const [initialPopup, setInitialPopup] = useState<\"login\" | \"regis\">(\"login\");\n\n const isBitkub =\n profile?.broker.name.toLowerCase() === BROKER_INFOS.bitkub.name;\n\n // calculate scroll speed and direction\n const checkScrollSpeed = (() => {\n let lastPos: number | null,\n newPos: number | null,\n timer: NodeJS.Timeout,\n delta: number;\n\n function clear() {\n lastPos = null;\n delta = 0;\n }\n\n clear();\n\n return () => {\n const wrapper = document.querySelector(\"#layout-wrapper\");\n if (wrapper) {\n newPos = wrapper.scrollTop;\n if (lastPos != null) {\n delta = newPos - lastPos;\n }\n lastPos = newPos;\n clearTimeout(timer);\n timer = setTimeout(clear, 50);\n return delta;\n }\n return 0;\n };\n })();\n\n useEffect(() => {\n const handleScrollEventListener = () => {\n const speed = checkScrollSpeed();\n\n if (speed > SCROLL_SPEED_THRESHOLD) {\n setShowAppBar(false);\n } else if (speed < -SCROLL_SPEED_THRESHOLD) {\n setShowAppBar(true);\n }\n };\n\n const wrapper = document.querySelector(\"#layout-wrapper\");\n\n if (wrapper) {\n wrapper.addEventListener(\"scroll\", handleScrollEventListener);\n\n return () => {\n wrapper.removeEventListener(\"scroll\", handleScrollEventListener);\n };\n }\n //eslint-disable-next-line\n }, []);\n\n const onClickLogin = (e: any) => {\n setOpenPopup(true);\n setInitialPopup(\"login\");\n };\n\n const handleClose = () => {\n setOpenPopup(false);\n };\n\n const getBottomNav = (dest: string, icon: React.ReactNode) => {\n const navAction = profile\n ? { component: RouterLink, to: dest }\n : { onClick: onClickLogin };\n return (\n \n );\n };\n\n return (\n \n \n \n \n {isBitkub && (\n }\n />\n )}\n {isBitkubGuess && getBottomNav(\"rebalance\", )}\n\n }\n />\n {!isBitkubGuess &&\n profile?.broker.name.toLowerCase() !== BROKERS.bitkub.name && (\n <>\n }\n />\n {getBottomNav(\"transaction\", )}\n \n )}\n {getBottomNav(\"account\", )}\n \n \n \n );\n};\n\nexport default AppBar;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core\";\nimport TopBar from \"./TopBar\";\nimport AppBar from \"./AppBar\";\n\ninterface styleProps {\n showDrawer?: boolean;\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.default,\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\",\n width: \"100%\",\n },\n wrapper: (props: styleProps) => {\n return {\n display: \"flex\",\n flex: \"1 1 auto\",\n overflow: \"hidden\",\n paddingTop: 0,\n paddingLeft: props.showDrawer ? 256 : 0,\n };\n },\n contentContainer: (props: styleProps) => {\n return {\n display: \"flex\",\n flex: \"1 1 auto\",\n overflow: \"hidden\",\n paddingTop: props.showDrawer ? 0 : 84,\n height: props.showDrawer ? \"100vh\" : \"calc(100vh)\",\n };\n },\n content: {\n flex: \"1 1 auto\",\n height: \"100%\",\n overflowY: \"scroll\",\n },\n}));\n\nconst LandingLayout: React.FC = ({ children }) => {\n const classes = useStyles({\n showDrawer: false,\n });\n\n return (\n
\n \n
\n
\n
\n {children}\n
\n
\n
\n \n
\n );\n};\n\nexport default LandingLayout;\n","import React from 'react';\nimport { useSelector, StateProps } from 'react-redux';\nimport { Redirect } from 'react-router-dom';\n\n\ninterface AuthRouteProp {\n component:any\n render:any,\n children:any,\n}\n\n\nconst AuthGuard: React.FC = (\n { component: Component, \n render,\n children,\n }) => {\n const account = useSelector((state:StateProps) => state.account);\n\n if (account.user === undefined) {\n return ;\n }\n\n\n return children;\n}\n\n\nexport default AuthGuard;\n","import React from 'react';\nimport { useSelector, StateProps } from 'react-redux';\nimport { \n Redirect \n} from 'react-router-dom';\nimport useRouteManager from 'src/utils/customHook/useRouteManager';\n// import { BROKERS } from 'src/context/constants/brokerInfo'\n// import { useGuess } from 'src/hooks';\n\ninterface GuestGuardProps {\n children:any\n}\n\n\nconst GuestGuard: React.FC = ({ children }) => {\n const account = useSelector((state:StateProps) => state.account);\n // const { isBitkubGuess } = useGuess();\n const routeManager = useRouteManager()\n\n if (account.user !== undefined) {\n return ;\n }\n\n // if (isBitkubGuess) {\n // return \n // }\n\n return children;\n}\n\n\nexport default GuestGuard;\n","import React from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { useProfile } from \"src/utils/customHook\";\n\ninterface ApprovedGuardProps {\n\tchildren: any;\n}\n\nconst ApprovedGuard: React.FC = ({ children }) => {\n\tconst profile = useProfile();\n\n\tif (!profile?.isApproved) {\n\t\treturn ;\n\t}\n\n\treturn children;\n};\n\nexport default ApprovedGuard;\n","import React from 'react';\nimport useCookie from 'src/hooks/useCookie';\nimport { useEffect } from 'react';\nimport { COOKIES } from 'src/context/constants';\nimport { readDefaultBroker } from 'src/utils/utils';\nimport { useHistory } from 'react-router-dom';\nimport LoadingScreen from './LoadingScreen';\nimport useRouteManager from 'src/utils/customHook/useRouteManager';\n\n\ninterface ComponentSectionProps {\n\n}\nconst RedirectDefaultBroker: React.FC = () => {\n\n const { getCookie } = useCookie()\n const history = useHistory();\n const { saveBroker } = useRouteManager();\n\n useEffect(()=>{\n let ltb = getCookie(COOKIES.latestSelBroker,false)\n let dfb:string = ltb || readDefaultBroker() || \"ENV_RDB078\"\n dfb = dfb.toLowerCase()\n saveBroker(dfb || \"\")\n history.replace(`/${dfb}/home`)\n },[getCookie,history,saveBroker])\n\n return (\n \n )\n}\n\nexport default RedirectDefaultBroker;\n","import React from 'react';\n\nimport { \n Redirect \n} from 'react-router-dom';\nimport { getCookie } from 'src/utils/utils';\n\ninterface MockGuardProps {\n children:any\n}\n\n\nconst MockGuard: React.FC = ({ children }) => {\n const isMock = getCookie(\"useMock\")\n \n if (isMock !== \"true\") return ;\n \n return children;\n}\n\n\nexport default MockGuard;\n","import React, { lazy } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport RouteProp from \"./interface\";\nimport LandingLayout from \"src/layouts/LandingLayout\";\nimport AuthGuard from \"src/components/AuthGuard\";\nimport GuestGuard from \"src/components/GuestGuard\";\nimport ApprovedGuard from \"src/components/ApprovedGuard\";\nimport RedirectDefaultBroker from \"src/components/RedirectDefaultBroker\";\nimport { MOCK_SECRET_PATH } from \"src/config\";\nimport MockGuard from \"src/components/MockGuard\";\nimport BitkubGuard from \"src/components/BitkubGuard\";\n\nexport const routesConfig: Array = [\n {\n path: `/${MOCK_SECRET_PATH}`,\n guard: MockGuard,\n routes: [\n {\n exact: true,\n path: `/${MOCK_SECRET_PATH}/mock/streaming/login`,\n component: lazy(() => import(\"src/viewsMock/StreamingLoginPage\")),\n },\n {\n exact: false,\n path: `/${MOCK_SECRET_PATH}/stt/sso/callback`,\n component: lazy(() => import(\"src/viewsMock/SttCallbackPage\")),\n },\n ],\n },\n {\n exact: true,\n path: \"/404\",\n component: lazy(() => import(\"src/views/FallbackPage\")),\n },\n {\n exact: false,\n path: \"/stt/sso/callback\",\n component: lazy(() => import(\"src/views/RegisterSteps\")),\n },\n // {\n // exact: true,\n // layout: LandingLayout,\n // path: \"/bitkub/guest/portfolio\",\n // guard: BitkubGuard,\n // component: lazy(() => import(\"src/views/BitkubPortfolioGuess\")),\n // },\n // {\n // exact: true,\n // layout: LandingLayout,\n // path: \"/bitkub/guest/account\",\n // guard: BitkubGuard,\n // component: lazy(() => import(\"src/views/BitkubAccountGuess\")),\n // },\n // {\n // exact: true,\n // layout: LandingLayout,\n // path: \"/bitkub/guest/faq\",\n // component: lazy(() => import(\"src/views/FaqPage\")),\n // },\n /**\n * This will be refactored to /bitkub/... instead of /:brokerName\n */\n // {\n // layout: LandingLayout,\n // path: \"/bitkub\",\n // routes: [\n // {\n // exact: true,\n // path: \"/bitkub/bot/rebalance\",\n // guard: AuthGuard,\n // component: lazy(() => import(\"src/views/Bitkub/Bot/RebalanceBotPage\")),\n // },\n // ],\n // },\n // {\n // exact: true,\n // layout: LandingLayout,\n // // path: \"/bitkub/bot/rebalance\",\n // path: \"/bitkub/rebalance\",\n // component: lazy(() => import(\"src/views/Bitkub/Bot/RebalanceBotPage\")),\n // guard: AuthGuard,\n // },\n {\n layout: LandingLayout,\n path: \"/:brokerName/:path\",\n routes: [\n {\n exact: true,\n path: \"/:brokerName/home\",\n guard: GuestGuard,\n component: lazy(() => import(\"src/views/HomePage\")),\n },\n {\n exact: true,\n path: \"/:brokerName/otp\",\n component: lazy(() => import(\"src/views/RegisterSteps/OTP\")),\n },\n {\n exact: true,\n path: \"/:brokerName/explore\",\n component: lazy(() => import(\"src/views/ExplorePage\")),\n },\n {\n exact: false,\n path: \"/:brokerName/model\",\n component: lazy(() => import(\"src/views/ModelPage\")),\n },\n {\n exact: true,\n path: \"/:broker/cookiepolicy\",\n component: lazy(() => import(\"src/views/CookiePolicyPage\")),\n },\n {\n exact: true,\n guard: AuthGuard,\n path: \"/:brokerName/portfolio\",\n component: lazy(() => import(\"src/views/PortfolioPage\")),\n },\n {\n exact: true,\n guard: AuthGuard,\n path: \"/:brokerName/spotGrid\",\n component: lazy(() => import(\"src/views/SpotGridPage\")),\n },\n {\n exact: true,\n guard: AuthGuard,\n path: \"/:brokerName/account\",\n component: lazy(() => import(\"src/views/AccountPage\")),\n },\n {\n exact: true,\n guard: ApprovedGuard,\n path: \"/:brokerName/transaction\",\n component: lazy(() => import(\"src/views/TransactionPage\")),\n },\n {\n exact: true,\n path: \"/:brokerName/faq\",\n component: lazy(() => import(\"src/views/FaqPage\")),\n },\n {\n component: () => ,\n },\n ],\n },\n {\n component: () => ,\n },\n];\n\nexport default routesConfig;\n","import React, {\n Suspense,\n Fragment,\n} from 'react';\nimport {\n Switch,\n Route,\n} from 'react-router-dom';\nimport RouteProp from './interface';\nimport routesConfig from './config';\nimport LoadingScreen from 'src/components/LoadingScreen';\n\n\nconst renderRoutes = (routes:Array) => (routes ? (\n }>\n \n {routes.map((route,i) => {\n const Guard = route.guard || Fragment;\n const Layout = route.layout || Fragment;\n const Component = route.component;\n\n return (\n (\n \n \n {\n route.routes\n ? renderRoutes(route.routes)\n : \n }\n \n \n )}\n />\n );\n })}\n \n \n): null);\n\n\nconst Routes:React.FC = () => {\n return renderRoutes(routesConfig);\n}\n\nexport default Routes;","import React from 'react'\nimport {\n Button,\n Box,\n Container,\n} from '@material-ui/core'\n\ninterface SelectBrokerProps {\n brokers : Array\n handleSelectBroker : (broker:string)=>void\n}\n\nconst SelectBrokerSection:React.FC = ({\n brokers,\n handleSelectBroker,\n}) => {\n return (\n \n {brokers.map((broker) => (\n handleSelectBroker(\"signInBrokerModal\")}\n >\n {broker}\n \n ))\n }\n \n \n )\n}\n\nexport default SelectBrokerSection","import React from 'react'\nimport {\n Button,\n Box,\n Container,\n TextField,\n Typography,\n Grid,\n} from '@material-ui/core'\nimport CTextField from 'src/components/CTextField'\n\ninterface SigninBrokerProps {\n signinUsername : string\n signinPasssword : string\n handleSigninData : (type:string,value:string) => void\n onSubmit : ()=>void\n}\n\nconst SigninBrokerSection:React.FC = ({\n signinUsername,\n signinPasssword,\n handleSigninData,\n onSubmit,\n}) => {\n\n\n\n return (\n \n \n \n โปรดกรอกข้อมูล user ของ Broker ที่คุณเลือก\n \n \n handleSigninData(\"username\", e.target.value)}\n />\n \n handleSigninData(\"password\", e.target.value)}\n />\n \n \n {/* */}\n \n \n )\n}\n\nexport default SigninBrokerSection","import { addBrokerSuccessModalProps, defaultModalProps } from 'modal-tpyes'\nimport {\n useMediaQuery,\n useTheme,\n SwipeableDrawer,\n Dialog,\n makeStyles,\n Typography,\n Box,\n} from '@material-ui/core'\nimport React , { useState, useEffect, Fragment } from 'react'\n// import { useSelector, StateProps} from 'react-redux'\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport SelectBrokerSection from './SelectBrokerSection'\nimport SigninBrokerSection from './SigninBrokerSection'\n// @ts-ignore\n// import { CREATE_BROKER_ACCOUNT, useMutation } from 'src/graphql'\nimport { createSubscriptionResponse } from 'subsciption-types'\nimport { useDispatch } from 'react-redux'\nimport { setDialog } from 'src/actions'\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\nimport { addInvestorAccountByLogin } from 'src/graphql/mutations/investor'\nimport { useMutation } from '@apollo/react-hooks'\nimport { zeroPad } from 'src/utils/utils';\n\ninterface stylesProp {\n useMobileUI:boolean\n}\n\nfunction TabPanel(props:any) {\n const { children, value, index, ...other } = props;\n\n return (\n
\n );\n}\n\n\nconst useStyles = makeStyles((theme)=>({\n root: (props:stylesProp) => ({\n borderRadius: props.useMobileUI ? \"16px 16px 16px 16px\" : \"16px 16px 0 0\",\n background: theme.palette.background.default,\n padding: \"8px\",\n }),\n closeIcon : {\n position: \"absolute\",\n cursor: \"pointer\",\n color: theme.palette.primary.main,\n top: theme.spacing(2),\n left: theme.spacing(3),\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n}))\n\nconst AddBrokerModal:React.FC = ({\n open,\n handleBack,\n handleClose,\n}) => {\n\n const theme = useTheme();\n // const account = useSelector((state:StateProps)=>state.account)\n const dispatch = useDispatch();\n const useMobileUI = useMediaQuery(theme.breakpoints.up(\"sm\"));\n const styleProps = { useMobileUI: useMobileUI };\n const classes = useStyles(styleProps);\n // const [selectedBroker,setSelectedBroker] = useState(\"\")\n const [addBrokerState,setAddBrokerState] = useState(0);\n const [signinUsername,setSigninUsername] = useState(\"8\");\n const [singinPassword,setSigninPassword] = useState(\"abcd1234\")\n const brokerAvaibles = [\"sandbox\"];\n const [addInvestorAccount] = useMutation(addInvestorAccountByLogin)\n // const [newBrokerAccount] = useMutation(CREATE_BROKER_ACCOUNT);\n\n // ------------------------ default function ---------------------------\n const onClose = () => {\n handleClose()\n setAddBrokerState(0)\n }\n\n const ModalProps = {\n paper: classes.root,\n };\n\n useEffect(()=>{\n if (open) {\n setAddBrokerState(0)\n }\n },[open])\n\n const openModal = (name:string,state:boolean,props:addBrokerSuccessModalProps) => {\n dispatch(setDialog(name,state,props))\n }\n\n const signinBrokerAccount = () =>\n new Promise( async (resolve, reject) => {\n try {\n let signinParams = {\n username: signinUsername,\n password: singinPassword,\n };\n const { data } = await addInvestorAccount({ variables: signinParams })\n resolve(data)\n } catch (err) {\n reject(err)\n }\n });\n\n // --------------------- select broker section -------------------------\n const handleSelectBroker = (broker:string) => {\n setAddBrokerState(1)\n // setSelectedBroker(broker)\n }\n\n const onSubmit = async() => {\n try {\n await signinBrokerAccount();\n let props : addBrokerSuccessModalProps = {\n isAddSuccess : true,\n addedBrokerAccount : [`FT${zeroPad(parseInt(signinUsername),9)}E`,`FT${zeroPad(parseInt(signinUsername),9)}D`],\n brokerUsername : signinUsername,\n message : \"Add Investor Account Success\",\n messageTh : \"เพิ่ม Investor Account สำเร็จ\"\n }\n openModal('addBrokerSuccessModal',true,props)\n\n } catch(err) {\n let props : any = {\n isAddSuccess : false,\n message : err.message,\n messageTh : err.messageTh\n }\n openModal('addBrokerSuccessModal',true,props)\n setAddBrokerState(1)\n }\n }\n\n const handleSigninData = (type:string,value:string) => {\n if (type === 'username') setSigninUsername(value)\n if (type === 'password') setSigninPassword(value)\n }\n\n const Header = () => (\n \n {addBrokerState===0&&\n }\n {addBrokerState===1&&\n setAddBrokerState(0)}\n />\n }\n \n \n เพิ่มบัญชีหุ้น (เลือก Broker)\n \n \n )\n\n const Loading = () => (\n
\n

Loading...

\n
\n )\n\n const content = () => (\n \n \n \n \n \n \n \n \n \n \n \n )\n\n\n return (\n useMobileUI ? (\n \n
\n {content()}\n
\n ) :\n (\n {}} keepMounted onClose={onClose} classes={ModalProps} anchor={\"bottom\"}>\n
\n {content()}\n \n )\n )\n}\n\nexport default AddBrokerModal","import { addBrokerSuccessModalProps, defaultModalProps } from 'modal-tpyes'\nimport {\n useMediaQuery,\n useTheme,\n Dialog,\n makeStyles,\n Container,\n Typography,\n Box,\n Button,\n Grid,\n} from '@material-ui/core'\nimport React , { useState, useEffect, Fragment } from 'react'\nimport { useSelector, StateProps } from 'react-redux'\n\ninterface stylesProp {\n useMobileUI:boolean\n}\n\nconst useStyles = makeStyles((theme)=>({\n root: (props:stylesProp) => ({\n borderRadius: theme.spacing(1) ,\n backgroundColor: \"white\",\n margin:\"0px\",\n minWidth: props.useMobileUI? \"0\":\"100%\",\n padding:theme.spacing(2),\n }),\n closeIcon : {\n position: \"absolute\",\n color: theme.palette.primary.main,\n top: theme.spacing(2),\n left: theme.spacing(3),\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n container : {\n padding:theme.spacing(4),\n },\n textBlack : {\n color: \"#000\"\n },\n textBlackBold : {\n color: \"#000\",\n fontWeight: \"bold\"\n },\n confirmSvg: {\n fill: theme.palette.primary.main,\n justifyItems:\"center\"\n},\n}))\n\nvar timer:any\n\n\nconst AddBrokerSuccessModal:React.FC = ({\n open,\n handleBack,\n handleClose,\n props:modalProps,\n}) => {\n\n const theme = useTheme();\n const useMobileUI = useMediaQuery(theme.breakpoints.up(\"sm\"));\n const styleProps = { useMobileUI: useMobileUI };\n const classes = useStyles(styleProps);\n const [props,setProps] = useState()\n const account = useSelector((state:StateProps)=>state.account)\n const [timeLeft, setTimeLeft] = useState(0);\n\n useEffect(() => {\n if (open) setTimeLeft(5);\n }, [open]);\n \n useEffect(() => {\n timer = setTimeout(() => {\n if (timeLeft >= 1 && open) {\n setTimeLeft(timeLeft - 1);\n }\n if (timeLeft === 1 && open) {\n onComplete();\n }\n }, 1000);\n return () => clearTimeout(timer);\n });\n\n const onClose = () => {\n clearTimeout(timer);\n setTimeLeft(1)\n handleClose()\n }\n\n const ModalProps = {\n paper: classes.root,\n };\n\n useEffect(()=>{\n if (modalProps) {\n let props:addBrokerSuccessModalProps = {\n isAddSuccess : modalProps.isAddSuccess,\n brokerUsername: modalProps.brokerUsername,\n message : modalProps.message,\n messageTh : modalProps.messageTh,\n addedBrokerAccount : modalProps.addedBrokerAccount\n }\n setProps(props)\n }\n },[modalProps])\n\n const onComplete = () => {\n if (open) {\n if (props?.isAddSuccess) {\n handleClose()\n if (account.refetcher.broker) {\n account!.refetcher!.broker()\n } else {\n window.location.reload()\n }\n }\n else handleBack()\n }\n }\n\n\n return (\n \n \n {!!props&&\n \n {props.isAddSuccess?\n \n \n \n \n \n คุณเพิ่มบัญชีหุ้นทั้งหมดของ username\n {props.brokerUsername}\n เรียบร้อยแล้ว\n \n หมายเลขบัญชีหุ้นที่ใช้ได้มีดังนี้\n \n {props.addedBrokerAccount?.map((account,index)=>(\n \n {account}\n {(index+1)!==props.addedBrokerAccount?.length&&,}\n \n ))}\n \n \n :\n \n {props.message}\n \n }\n \n \n }\n \n \n )\n}\n\nexport default AddBrokerSuccessModal","import React, { useEffect, useState } from 'react';\nimport {\n Grow,\n makeStyles, Typography, useTheme,\n} from '@material-ui/core';\nimport { defaultModalProps } from 'modal-tpyes';\n\nexport type snackbarColor = 'primary'|'secondary'\n\nexport interface SnackbarModalProps {\n\tactionType:snackbarColor\n snackbarMessage:string\n}\n\nconst useStyles = makeStyles((theme) => ({\n root:{\n position:\"fixed\",\n zIndex: theme.zIndex.drawer + 200,\n backgroundColor:theme.palette.primary.main,\n // height:40,\n // width:156,\n left:24,\n borderRadius:theme.spacing(1),\n display:'flex',\n alignItems:\"center\",\n justifyContent:\"center\",\n padding:theme.spacing(3),\n height:40,\n bottom: 24,\n [theme.breakpoints.up('md')] : {\n bottom:64,\n // width:\"100%\"\n },\n [theme.breakpoints.down('xs')] : {\n right:24\n },\n }\n}));\n\nlet timer:NodeJS.Timeout\n\nconst SnackbarModal: React.FC = ({\n open,\n handleBack,\n handleClose,\n props: modalProps,\n}) => {\n\n const classes = useStyles();\n const theme = useTheme()\n // const [openSnackbar,setOpenSnakbar] = useState(false)\n const [snakbarColor,setSnackbarColor] = useState(theme.palette.primary.main)\n const [snackbarMessage,setSnackbarMessage] = useState(\"\")\n\n useEffect(() => {\n\t\tif (modalProps && open) {\n\t\t\tlet props:SnackbarModalProps = modalProps\n if (props.actionType === \"primary\") setSnackbarColor(theme.palette.primary.main)\n if (props.actionType === \"secondary\") setSnackbarColor(theme.palette.secondary.main)\n if (props.snackbarMessage) setSnackbarMessage(props.snackbarMessage)\n clearTimeout(timer)\n timer = setTimeout(()=>{\n handleClose()\n },3000)\n\t\t}\n\t}, [modalProps]);\n\n return (\n \n
\n {snackbarMessage}\n
\n
\n )\n}\n\nexport default SnackbarModal;\n","import { defaultModalProps } from 'modal-tpyes'\nimport {\n useMediaQuery,\n useTheme,\n Dialog,\n makeStyles,\n Container,\n Typography,\n Box,\n Grid,\n Button\n} from '@material-ui/core'\nimport React , { useState, useEffect } from 'react'\n// import { useSelector, StateProps} from 'react-redux'\nimport { useHistory } from 'react-router-dom'\n\ninterface stylesProp {\n useMobileUI:boolean\n}\n\nconst useStyles = makeStyles((theme)=>({\n root: (props:stylesProp) => ({\n borderRadius: theme.spacing(1) ,\n backgroundColor: \"white\",\n margin:\"0px\",\n minWidth: props.useMobileUI? \"0\":\"100%\",\n padding:\"16px\"\n }),\n closeIcon : {\n position: \"absolute\",\n color: theme.palette.primary.main,\n top: theme.spacing(2),\n left: theme.spacing(3),\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n textBlack: {\n color: \"#000\"\n },\n confirmSvg: {\n fill: theme.palette.primary.main,\n justifyItems:\"center\"\n },\n}))\n\ninterface props {\n modelName : string,\n isSubSuccess : boolean,\n message : string\n accountId : string\n}\n\nconst ModelSubConfirmModal:React.FC = ({\n open,\n handleBack,\n handleClose,\n props:modalProps,\n}) => {\n\n const theme = useTheme();\n const useMobileUI = useMediaQuery(theme.breakpoints.up(\"sm\"));\n const styleProps = { useMobileUI: useMobileUI };\n const classes = useStyles(styleProps);\n const [props,setProps] = useState()\n const [timeLeft, setTimeLeft] = useState(0);\n const history = useHistory();\n\n useEffect(() => {\n if (open) setTimeLeft(5);\n }, [open]);\n \n useEffect(() => {\n const timer = setTimeout(() => {\n if (timeLeft >= 1) {\n setTimeLeft((timeleft) => timeleft - 1);\n }\n if (timeLeft === 1) {\n // setModel(\"\");\n onClose();\n }\n }, 1000);\n return () => clearTimeout(timer);\n });\n\n const onClose = () => {\n setTimeLeft(0)\n history.push(`/portfolio?accid=${props?.accountId||\"default\"}`)\n handleClose()\n }\n\n const ModalProps = {\n paper: classes.root,\n };\n\n useEffect(()=>{\n if (modalProps) {\n let props:props = {\n isSubSuccess: modalProps.isSubSuccess,\n message : modalProps.message,\n modelName : modalProps.modelName,\n accountId : modalProps.accountId,\n }\n setProps(props)\n }\n },[modalProps])\n\n\n return (\n \n \n \n {props&&\n \n {props.isSubSuccess ? \n \n \n \n \n \n คุณได้ติดตาม {props?.modelName} เรียบร้อยแล้ว\n \n :\n `${props?.message}`\n }\n }\n \n {/* */}\n \n \n \n \n \n \n )\n}\n\nexport default ModelSubConfirmModal","import {\n\tdefaultModalProps,\n\tdeleteBrokerModalProps,\n\tdeleteBrokerModalSuccessProps,\n} from \"modal-tpyes\";\nimport {\n\tuseMediaQuery,\n\tuseTheme,\n\tDialog,\n\tmakeStyles,\n\tContainer,\n\tTypography,\n\tButton,\n\tGrid,\n\tBox,\n} from \"@material-ui/core\";\nimport React, { useState, useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\n// import { useMutation,DELETE_BROKER_ACCOUNT, DELETE_SUBSCRIPTION_GQL } from 'src/graphql'\nimport {\n\t// deleteBrokerAccountProps,\n\t// deleteBrokerAccountResponse,\n\tdeleteBrokerAccountResult,\n} from \"subsciption-types\";\nimport { setDialog } from \"src/actions\";\nimport { useMutation } from \"@apollo/client\";\nimport { deleteInvestorAccount } from \"src/graphql/mutations/investor\";\n\ninterface stylesProp {\n\tuseMobileUI: boolean;\n}\n\nconst useStyles = makeStyles((theme) => ({\n\troot: (props: stylesProp) => ({\n\t\tborderRadius: theme.spacing(1),\n\t\tbackgroundColor: \"white\",\n\t\tmargin: \"0px\",\n\t\tminWidth: props.useMobileUI ? \"440px\" : \"100%\",\n\t\tpadding: theme.spacing(3),\n\t}),\n\tcloseIcon: {\n\t\tposition: \"absolute\",\n\t\tcolor: theme.palette.primary.main,\n\t\ttop: theme.spacing(2),\n\t\tleft: theme.spacing(3),\n\t\twidth: theme.spacing(3),\n\t\theight: theme.spacing(3),\n\t},\n\tcontainer: {\n\t\tpadding: theme.spacing(4),\n\t},\n\ttextBlack: {\n\t\tcolor: \"#000\",\n\t},\n\ttextGrey: {\n\t\tcolor: \"grey\",\n\t},\n}));\n\nconst DeleteBrokerModal: React.FC = ({\n\topen,\n\t// handleBack,\n\thandleClose,\n\tprops: modalProps,\n}) => {\n\tconst theme = useTheme();\n\tconst useMobileUI = useMediaQuery(theme.breakpoints.up(\"sm\"));\n\tconst dispatch = useDispatch();\n\tconst styleProps = { useMobileUI: useMobileUI };\n\tconst classes = useStyles(styleProps);\n\tconst [props, setProps] = useState();\n\tconst [deleteAccount] = useMutation(deleteInvestorAccount);\n\tconst [forceDelete, setForceDelete] = useState(true);\n\n\tvoid setForceDelete;\n\n\tconst onClose = () => {\n\t\thandleClose();\n\t};\n\n\tconst ModalProps = {\n\t\tpaper: classes.root,\n\t};\n\n\tconst openSuccessModal = (props: deleteBrokerModalSuccessProps) => {\n\t\tlet deleteBrokerSuccessProps: deleteBrokerModalSuccessProps = props;\n\t\tdispatch(\n\t\t\tsetDialog(\"deleteBrokerSuccessModal\", true, deleteBrokerSuccessProps)\n\t\t);\n\t};\n\n\tconst deleteBrokerAccount = () =>\n\t\tnew Promise(async (resolve, reject) => {\n\t\t\tlet deleteAccountParams = {\n\t\t\t\tusername: props?.username,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tlet { data } = await deleteAccount({ variables: deleteAccountParams });\n\t\t\t\tresolve(data);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\n\tconst handleDeleteAccount = async () => {\n\t\ttry {\n\t\t\tawait deleteBrokerAccount();\n\t\t\tif (props) {\n\t\t\t\topenSuccessModal({\n\t\t\t\t\tisSuccess: true,\n\t\t\t\t\tusername: props.username,\n\t\t\t\t\tbrokerName: props.brokerName,\n\t\t\t\t\taccountNos: props.accountNos,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (props) {\n\t\t\t\topenSuccessModal({\n\t\t\t\t\tisSuccess: false,\n\t\t\t\t\tusername: props.username,\n\t\t\t\t\tbrokerName: props.brokerName,\n\t\t\t\t\taccountNos: props.accountNos,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (modalProps) {\n\t\t\tlet props: deleteBrokerModalProps = {\n\t\t\t\taccountNos: modalProps.accountNos,\n\t\t\t\tusername: modalProps.username,\n\t\t\t\tbrokerName: modalProps.brokerName,\n\t\t\t\tmessage: modalProps.message,\n\t\t\t\tmessageTh: modalProps.messageTh,\n\t\t\t};\n\t\t\tsetProps(props);\n\t\t}\n\t}, [modalProps]);\n\n\treturn (\n\t\t\n\t\t\t{!!props && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\tforceDelete\n\t\t\t\t\t\t\t\t? \"ยืนยันการยกเลิกผูกบัญชี\"\n\t\t\t\t\t\t\t\t: \"ยืนยันการยกเลิกการติดตาม model ของ\"\n\t\t\t\t\t\t} ${props?.brokerName}`}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\tforceDelete\n\t\t\t\t\t\t\t\t? \"ข้อมูลการติดตาม model ทั้งหมดของ\"\n\t\t\t\t\t\t\t\t: \"บัญชีที่ไม่ได้ติดตาม model ของ\"\n\t\t\t\t\t\t} ${props?.username}`}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{`ภายใต้ account number`}\n\t\t\t\t\t\n\t\t\t\t\t{/* {\n props?.accountNos?.map((account)=>(\n \n {account.accountNo}\n \n ))\n } */}\n\t\t\t\t\t\n\t\t\t\t\t\tจะถูกลบ\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tย้อนกลับ\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tยืนยัน\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default DeleteBrokerModal;\n","import { defaultModalProps, deleteBrokerModalSuccessProps } from 'modal-tpyes'\nimport {\n useMediaQuery,\n useTheme,\n Dialog,\n makeStyles,\n Typography,\n Button,\n Grid,\n Box,\n} from '@material-ui/core'\nimport React , { useState, useEffect} from 'react'\nimport {useHistory} from 'react-router-dom'\ninterface stylesProp {\n useMobileUI:boolean\n}\n\nconst useStyles = makeStyles((theme)=>({\n root: (props:stylesProp) => ({\n borderRadius: theme.spacing(1) ,\n backgroundColor: \"white\",\n margin:\"0px\",\n minWidth: props.useMobileUI? \"0\":\"100%\",\n padding: theme.spacing(3),\n }),\n closeIcon : {\n position: \"absolute\",\n color: theme.palette.primary.main,\n top: theme.spacing(2),\n left: theme.spacing(3),\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n container : {\n padding:32,\n },\n textBlack: {\n color: \"#000\"\n },\n confirmSvg: {\n fill: theme.palette.primary.main,\n justifyItems:\"center\"\n },\n}))\n\n\nconst DeleteBrokerSuccessModal:React.FC = ({\n open,\n // handleBack,\n handleClose,\n props:modalProps,\n}) => {\n\n const theme = useTheme();\n const useMobileUI = useMediaQuery(theme.breakpoints.up(\"sm\"));\n const styleProps = { useMobileUI: useMobileUI };\n const classes = useStyles(styleProps);\n const [props,setProps] = useState()\n const history = useHistory();\n const [timeLeft, setTimeLeft] = useState(0);\n\n useEffect(() => {\n if (open) setTimeLeft(5);\n }, [open]);\n \n useEffect(() => {\n const timer = setTimeout(() => {\n if (timeLeft >= 1) {\n setTimeLeft((timeleft) => timeleft - 1);\n }\n if (timeLeft === 1) {\n onClose();\n }\n }, 1000);\n return () => clearTimeout(timer);\n });\n\n const onClose = () => {\n handleClose()\n history.go(0)\n }\n\n const ModalProps = {\n paper: classes.root,\n };\n\n\n useEffect(()=>{\n if (modalProps) {\n setProps(modalProps)\n }\n },[modalProps])\n\n //JSX Varialbes ...\n const renderDeleteSuccess = (\n \n \n \n \n \n \n {`ยกเลิกการผู้บัญชี ${props?.brokerName} สำเร็จ`}\n \n \n {`หมายเลขบัญชีหุ้นของ ${props?.username}`}\n {/* {props?.accountNos?.map((accountNo)=>(\n \n {'- ' + accountNo.accountNo}\n \n ))} */}\n {`ถูกลบสำเร็จ`}\n \n \n \n )\n\n const renderDeleteFail = (\n \n \n \n \n \n \n {`ลบบัญชี ${props?.username} สำเร็จ`}\n \n \n \n )\n\n const renderTimerButton = (\n \n \n \n )\n\n return (\n \n {props?.isSuccess ? renderDeleteSuccess : renderDeleteFail}\n {renderTimerButton}\n \n )\n}\n\nexport default DeleteBrokerSuccessModal","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\n\t// makeStyles,\n\t// Dialog,\n\tBox,\n\tTypography,\n\tButton,\n\tCircularProgress,\n\tuseTheme,\n} from \"@material-ui/core\";\nimport OtpInput from \"react-otp-input\";\n// import { PopUp } from '../../BasePopUp';\nimport authService from \"src/services/authService\";\nimport { useLayout, useTimeleft } from \"src/utils/customHook\";\nimport BaseDrawer from \"src/components/PopUp/BaseDrawer\";\nimport { PopUp } from \"src/components/PopUp/BasePopUp\";\nimport { defaultModalProps } from \"modal-tpyes\";\nimport { banOTPErrorType } from \"src/types/error-types\";\nimport { ERROR_CODE } from \"src/context/constants/errorCode\";\n// import BaseDrawer from '../../BaseDrawer';\n\nexport interface OTPConfirmModalProps {\n\tonSuccess?: () => void;\n\tonFail?: (error: any) => void;\n\tonClose?: () => void;\n\tonBack?: () => void;\n\ttitle?: string;\n\tmessage?: string;\n\tsendAgain?: () => Promise | any;\n}\n\nvar timer: any = undefined;\nconst OTP_INTERVAL = 30;\n\nconst OTPConfirmModal: React.FC = ({\n\thandleClose,\n\topen,\n\thandleBack,\n\tprops: modalProps,\n}) => {\n\tconst theme = useTheme();\n\n\tconst { isSmall } = useLayout();\n\tconst [props, setProps] = useState();\n\tconst [loading, setLoading] = useState(false);\n\tconst [otp, setOtp] = useState(\"\");\n\tconst [otpError, setOtpError] = useState(false);\n\tconst { timeLeft, restartCount } = useTimeleft(OTP_INTERVAL);\n\t// const [otpTimeLeft,setOtpTimeLeft] = useState(0);\n\n\tuseEffect(() => {\n\t\tif (modalProps) {\n\t\t\tsetProps(modalProps);\n\t\t}\n\t}, [modalProps]);\n\n\tconst stopTimer = () => {\n\t\tclearInterval(timer);\n\t};\n\n\n\tconst timeLeftMessage = useMemo(() => {\n\t\tconst minutes = Math.floor(timeLeft / 60);\n\t\tconst seconds = timeLeft - 60 * minutes;\n\t\tif (minutes > 0) return `${minutes} นาที ${seconds} วินาที`;\n\t\treturn `${seconds} วินาที`;\n\t}, [timeLeft]);\n\n\t// const isBan = useMemo(()=>{\n\t// if (timeLeft > 0) return true\n\t// return false\n\t// },[timeLeft])\n\n\tconst banErrorCallback = (err: banOTPErrorType) => {\n\t\tif (err.code === ERROR_CODE.OTP_BAN) {\n\t\t\tif (err.second) restartCount(err.second);\n\t\t}\n\t};\n\n\t// const startTimer = () => {\n\t// timer = setInterval(()=>{\n\t// setOtpTimeLeft((prev)=>prev-1)\n\t// },1000)\n\t// }\n\n\t// useEffect(()=>{\n\t// if (otpTimeLeft <= 0) stopTimer()\n\t// },[otpTimeLeft])\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetOtp(\"\");\n\t\t\tsetOtpError(false);\n\t\t\trestartCount(OTP_INTERVAL);\n\t\t\tsetLoading(false);\n\t\t}\n\t\treturn () => {\n\t\t\tstopTimer();\n\t\t};\n\t\t// eslint-disable-next-line\n\t}, [open]);\n\n\tconst handleOTPChange = (otp: string) => {\n\t\tsetOtp(otp);\n\t\tsetOtpError(false);\n\t};\n\n\tconst wrapperHandleClsoe = () => {\n\t\thandleClose();\n\t\tif (props?.onClose) props.onClose();\n\t};\n\n\tconst wrapperHandleBack = () => {\n\t\thandleClose();\n\t\tif (props?.onBack) props.onBack();\n\t};\n\n\tconst onClickSendAgain = async () => {\n\t\ttry {\n\t\t\tsetLoading(true);\n\t\t\trestartCount(OTP_INTERVAL);\n\t\t\t// if (onSuccess) await onSuccess()\n\t\t\tif (props?.sendAgain) await props?.sendAgain();\n\t\t\tsetLoading(false);\n\t\t} catch (err) {\n\t\t\tbanErrorCallback(err);\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tconst verifyOTP = async () => {\n\t\ttry {\n\t\t\tsetOtpError(false);\n\t\t\tsetLoading(true);\n\t\t\tawait authService.verifyOTP(otp);\n\t\t\tsetLoading(false);\n\t\t\tif (props?.onSuccess) await props.onSuccess();\n\t\t\t// onClose();\n\t\t} catch (err) {\n\t\t\tsetOtpError(true);\n\t\t\tsetLoading(false);\n\t\t\tif (props?.onFail) props?.onFail(err);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (otp.length === 4) verifyOTP();\n\t\t// eslint-disable-next-line\n\t}, [otp]);\n\tconst renderDonotAccept = (\n\t\t<>\n\t\t\t\n\t\t\t\tไม่ได้รับข้อความ OTP ?\n\t\t\t\n\t\t\t 0}\n\t\t\t\tonClick={onClickSendAgain}\n\t\t\t\tstyle={{ paddingTop: 0, paddingBottom: 0 }}>\n\t\t\t\tส่งอีกครั้ง\n\t\t\t\n\t\t\n\t);\n\tconst renderEnterOTP = (\n\t\t<>\n\t\t\t\n\t\t\t\tไม่ได้รับข้อความ OTP ? สามารถส่งอีกครั้งใน{\" \"}\n\t\t\t\t{`${timeLeftMessage}`}{\" \"}\n\t\t\t\n\t\t\n\t);\n\n\tconst RenderOtp = (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t{props?.message}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tisInputNum={true}\n\t\t\t\t\t\thasErrored={otpError}\n\t\t\t\t\t\tisDisabled={loading}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{otpError && (\n\t\t\t\t\t\n\t\t\t\t\t\tรหัส OTP ไม่ถูกต้องโปรดลองใหม่\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t{timeLeft > 0 ? renderEnterOTP : renderDonotAccept}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{loading && }\n\t\t\t\n\t\t\n\t);\n\n\tif (isSmall)\n\t\treturn (\n\t\t\t\n\t\t\t\t{RenderOtp}\n\t\t\t\n\t\t);\n\n\treturn (\n\t\t\n\t\t\t{RenderOtp}\n\t\t\n\t);\n};\n\nexport default OTPConfirmModal;\n","import React, { Fragment } from \"react\";\nimport { useSelector, useDispatch, StateProps } from \"react-redux\";\nimport { setDialog } from \"../../actions/modalActions\";\nimport {\n AddBrokerModal,\n ModelSubConfirmModal,\n AddBrokerSuccessModal,\n DeleteBrokerModal,\n DeleteBrokerSuccessModal,\n OTPConfirmModal,\n SnakbarModal,\n} from \"./modals\";\n\nexport type Ref = HTMLDivElement;\n\ntype Props = {\n children: React.ReactNode;\n rest?: any;\n};\n\nconst ModalProvider = React.forwardRef((Props, ref) => {\n const modalState = useSelector((state: StateProps) => state.modal);\n const dispatch = useDispatch();\n\n const handleClose = () => {\n Object.keys(modalState.modalStatus).forEach((modalName) => {\n dispatch(setDialog(modalName, false));\n });\n };\n\n //use to go back to X prev dialog , when backCount = x mean go back to x prev dialog\n //so 1 mean prev closed dialog\n const handleBack = (backCount = 1) => {\n let prevPopup =\n modalState.prevModal[modalState.prevModal.length - backCount];\n dispatch(setDialog(prevPopup, true));\n };\n\n return (\n \n {Props.children}\n \n \n \n \n \n \n \n \n );\n});\n\nexport default ModalProvider;\n","import React, { Fragment, useState, useEffect } from \"react\";\nimport {\n\tmakeStyles,\n\tHidden,\n\tDialog,\n\tTypography,\n\tBox,\n\tGrid,\n\tButton,\n\tSlide,\n\tDrawer,\n\tuseTheme,\n\tLink,\n} from \"@material-ui/core\";\nimport { TransitionProps } from \"@material-ui/core/transitions\";\nimport { KeyboardArrowDown } from \"@material-ui/icons\";\n\nimport { getCookie, setCookie } from \"src/utils/utils\";\nimport useRouteManager from \"src/utils/customHook/useRouteManager\";\n\nconst TransitionUP = React.forwardRef(function Transition(\n\tprops: TransitionProps & { children?: React.ReactElement },\n\tref: React.Ref\n) {\n\treturn ;\n});\n\nconst useStyles = makeStyles((theme) => ({\n\theader: {\n\t\tcolor: theme.palette.primary.main,\n\t},\n\tdescription: {\n\t\tcolor: theme.palette.text.primary,\n\t},\n\tdescriptionLink: {\n\t\tcolor: theme.palette.primary.main,\n\t\ttextDecoration: \"underline\",\n\t\t\"&:hover\": {\n\t\t\tcursor: \"pointer\",\n\t\t},\n\t},\n\tgreenButton: {\n\t\tbackgroundColor: theme.palette.primary.main,\n\t\tcolor: theme.palette.background.default,\n\t\tfontWeight: 500,\n\t\tfontSize: \"13px\",\n\t\tpadding: \"6px 10px\",\n\t\tlineHeight: \"20.77px\",\n\t\tborderRadius: \"8px\",\n\t},\n\ttransButton: {\n\t\tcolor: theme.palette.primary.main,\n\t\ttextDecoration: \"underline\",\n\t\tfontWeight: 500,\n\t\tfontSize: \"13px\",\n\t\tpadding: \"5px\",\n\t\t\"&:hover\": {\n\t\t\tbackgroundColor: \"transparent\",\n\t\t},\n\t},\n\tzeroStateDialog: {\n\t\tposition: \"absolute\",\n\t\tbottom: theme.spacing(1),\n\t\tpadding: \"20px 35px\",\n\t\tborderRadius: \"8px\",\n\t\tpointerEvents: \"auto\",\n\t\tzIndex: theme.zIndex.drawer+110,\n\t},\n\tfirstStateDialog: {\n\t\tpadding: \"20px 35px 60px 35px\",\n\t\tborderRadius: \"20px\",\n\t},\n\ticonButton: {\n\t\t\"&:hover\": {\n\t\t\tcursor: \"pointer\",\n\t\t},\n\t},\n\tstateDrawer: {\n\t\tmargin: \"auto\",\n\t\tborderRadius: \"20px 20px 0 0\",\n\t\twidth: 450,\n\t\t[theme.breakpoints.down(\"xs\")]: {\n\t\t\twidth: \"100%\",\n\t\t},\n\t\tpointerEvents: \"auto\",\n\t},\n\tzeroStateDrawerContainer: {\n\t\tpadding: \"20px 50px\",\n\t\ttextAlign: \"center\",\n\t},\n\tfirstStateDrawerContainer: {\n\t\tpadding: \"20px 50px 40px 50px\",\n\t\ttextAlign: \"center\",\n\t},\n}));\n\nconst PDPACookie: React.FC = ({ children }) => {\n\tconst classes = useStyles();\n\tconst theme = useTheme();\n\tconst { getRedirectPathname } = useRouteManager();\n\tconst pdpaAllow = getCookie(\"CONSENT\");\n\tconst [hasConsent, setHasConsent] = useState(Boolean(pdpaAllow));\n\tconst [infoState, setInfoState] = useState(-1); // 0: initial , 1: more information\n\tconst handleApprove = () => {\n\t\tsetCookie(\"CONSENT\", true, 365);\n\t\tsetHasConsent(true);\n\t};\n\n\tconst handleInfoState = (state: number) => {\n\t\tif (state !== 0 && state !== 1) state = 0;\n\t\tsetInfoState(state);\n\t};\n\n\tconst handleCookiePolicy = () => {\n\t\twindow.open(\"/cookiepolicy\");\n\t};\n\n\tconst renderDesktop = () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{/* InfoState = 0 */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tเว็บไซต์นี้ใช้คุกกี้\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tFinnize ใช้คุกกี้เพื่อเพิ่มประสิทธิภาพ\n\t\t\t\t\t\t\t\t\tและประสบการณ์ที่ดีในการใช้งานเว็บไซต์\n\t\t\t\t\t\t\t\t\tคุณสามารถเลือกตั้งค่าความยินยอมการใช้คุกกี้ได้ โดยคลิก\n\t\t\t\t\t\t\t\t\t\"การตั้งค่าคุกกี้\"{\" \"}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tนโยบายความเป็นส่วนตัว\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tยอมรับทั้งหมด\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t handleInfoState(1)}\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tclassName={classes.transButton}>\n\t\t\t\t\t\t\t\t\tรายละเอียดคุกกี้\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{/* InfoState = 1 */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t handleInfoState(0)}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tรายละเอียดคุกกี้\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tยอมรับทั้งหมด\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tคุกกี้คืออะไร?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tคุกกี้ คือ ไฟล์ข้อมูลขนาดเล็กที่ถูกดาวน์โหลดไปยังเว็บเบราว์เซอร์\n\t\t\t\t\t\t\tอุปกรณ์คอมพิวเตอร์ อุปกรณ์เชื่อมต่ออินเตอร์เน็ต เช่น สมาร์ทโฟน\n\t\t\t\t\t\t\tหรือแท็บเล็ตของคุณ เพื่อทำหน้าที่บันทึกข้อมูลและการตั้งค่าต่างๆ\n\t\t\t\t\t\t\tเช่น สถานะการเข้าใช้งานในปัจจุบันของคุณ\n\t\t\t\t\t\t\tข้อมูลการตั้งค่าภาษาข้อมูลเกี่ยวกับประวัติการเข้าใช้งานบนเว็บไซต์และ/หรือ\n\t\t\t\t\t\t\tแอปพลิเคชันที่คุณชื่นชอบเพื่อให้คุณสามารถใช้บริการที่มีการใช้งานคุกกี้\n\t\t\t\t\t\t\tหรือเทคโนโลยีอื่นใดที่มีลักษณะใกล้เคียงกันได้อย่างต่อเนื่อง ​\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tคุกกี้จำเป็นไหม?\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tคุกกี้ประเภทนี้มีความสำคัญในการทำให้คุณสามารถเยี่ยมชมและใช้บริการเว็บไซต์\n\t\t\t\t\t\t\tFinnize ได้ และในการให้บริการและฟังก์ชันต่างๆ บนเว็บไซต์ของ\n\t\t\t\t\t\t\tFinnize อาทิ การเข้าสู่พื้นที่ปลอดภัยบนเว็บไซต์ของระบบ\n\t\t\t\t\t\t\tหากไม่มีคุกกี้ประเภทนี้ Finnize\n\t\t\t\t\t\t\tหรือบางฟังก์ชันบนเว็บไซต์อาจจะไม่สามารถทำงานได้ตามปกติ\n\t\t\t\t\t\t\tรวมทั้งคุณจะไม่สามารถใช้บริการบางอย่างตามที่ร้องขอบนระบบของ\n\t\t\t\t\t\t\tFinnizeได้ ​\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\tconst renderMobile = () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{/* InfoState = 0 */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tเว็บไซต์นี้ใช้คุกกี้\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tFinnize ใช้คุกกี้เพื่อเพิ่มประสิทธิภาพ\n\t\t\t\t\t\t\tและประสบการณ์ที่ดีในการใช้งานเว็บไซต์\n\t\t\t\t\t\t\tคุณสามารถเลือกตั้งค่าความยินยอมการใช้คุกกี้ได้ โดยคลิก\n\t\t\t\t\t\t\t\"การตั้งค่าคุกกี้\"{\" \"}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tนโยบายความเป็นส่วนตัว\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t handleInfoState(1)}\n\t\t\t\t\t\t\t\tclassName={classes.transButton}>\n\t\t\t\t\t\t\t\tรายละเอียดคุกกี้\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{/* InfoState = 1 */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t handleInfoState(0)}>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tรายละเอียดคุกกี้\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tยอมรับทั้งหมด\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tคุกกี้คืออะไร?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tคุกกี้ คือ ไฟล์ข้อมูลขนาดเล็กที่ถูกดาวน์โหลดไปยังเว็บเบราว์เซอร์\n\t\t\t\t\t\t\t\tอุปกรณ์คอมพิวเตอร์ อุปกรณ์เชื่อมต่ออินเตอร์เน็ต เช่น สมาร์ทโฟน\n\t\t\t\t\t\t\t\tหรือแท็บเล็ตของคุณ เพื่อทำหน้าที่บันทึกข้อมูลและการตั้งค่าต่างๆ\n\t\t\t\t\t\t\t\tเช่น สถานะการเข้าใช้งานในปัจจุบันของคุณ\n\t\t\t\t\t\t\t\tข้อมูลการตั้งค่าภาษาข้อมูลเกี่ยวกับประวัติการเข้าใช้งานบนเว็บไซต์และ/หรือ\n\t\t\t\t\t\t\t\tแอปพลิเคชันที่คุณชื่นชอบเพื่อให้คุณสามารถใช้บริการที่มีการใช้งานคุกกี้\n\t\t\t\t\t\t\t\tหรือเทคโนโลยีอื่นใดที่มีลักษณะใกล้เคียงกันได้อย่างต่อเนื่อง ​\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tคุกกี้จำเป็นไหม?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tคุกกี้ประเภทนี้มีความสำคัญในการทำให้คุณสามารถเยี่ยมชมและใช้บริการเว็บไซต์\n\t\t\t\t\t\t\t\tFinnize ได้ และในการให้บริการและฟังก์ชันต่างๆ บนเว็บไซต์ของ\n\t\t\t\t\t\t\t\tFinnize อาทิ การเข้าสู่พื้นที่ปลอดภัยบนเว็บไซต์ของระบบ\n\t\t\t\t\t\t\t\tหากไม่มีคุกกี้ประเภทนี้ Finnize\n\t\t\t\t\t\t\t\tหรือบางฟังก์ชันบนเว็บไซต์อาจจะไม่สามารถทำงานได้ตามปกติ\n\t\t\t\t\t\t\t\tรวมทั้งคุณจะไม่สามารถใช้บริการบางอย่างตามที่ร้องขอบนระบบของ\n\t\t\t\t\t\t\t\tFinnizeได้ ​\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\tuseEffect(() => {\n\t\tconst timer = setTimeout(() => {\n\t\t\thandleInfoState(0);\n\t\t}, 3000);\n\t\treturn () => clearTimeout(timer);\n\t}, []);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\t{/* Desktop */}\n\t\t\t{renderDesktop()}\n\n\t\t\t{/* Mobile */}\n\t\t\t{renderMobile()}\n\t\t\n\t);\n};\n\nexport default PDPACookie;\n","import React from 'react';\nimport {\n AppBar,\n Box,\n makeStyles,\n Toolbar,\n} from '@material-ui/core';\nimport { Spinner } from 'src/components/Loaders';\nimport Logo from 'src/components/Logo';\nimport Footer from 'src/views/HomePage/Footer';\nimport MockToggle from 'src/components/MockToggle';\n\nconst useStyles = makeStyles((theme) => ({\n root : {\n display:\"flex\",\n flexDirection:\"column\",\n minHeight:\"100vh\",\n backgroundColor:theme.palette.background.default\n },\n appBar: {\n\t\tbackgroundColor: \"inherit\",\n\t\t// zIndex: theme.zIndex.drawer + 100,\n height:64,\n\t},\n\ttoolbar: {\n\t\theight: 64,\n\t},\n content : {\n position:\"relative\",\n paddingTop:64,\n flex:1,\n display:\"flex\",\n alignItems:\"center\",\n justifyContent:\"center\"\n }\n}));\n\n\nconst PlaintLayout: React.FC = ({children}) => {\n\n const classes = useStyles();\n return (\n
\n \n \n \n \n \n \n \n {children}\n \n {/* */}\n {/*
*/}\n
\n {/*
*/}\n
\n )\n}\n\nexport default PlaintLayout;\n","import React from 'react';\nimport {\n Box,\n makeStyles,\n} from '@material-ui/core';\nimport { Spinner } from 'src/components/Loaders';\nimport PlainLayout from '../../layouts/PlainLayout';\n\nconst useStyles = makeStyles((theme) => ({\n spinnerBox : {\n position:\"relative\",\n paddingTop:64,\n flex:1,\n display:\"flex\",\n alignItems:\"center\",\n justifyContent:\"center\"\n }\n}));\n\n\nconst LoadingWithPlainLayoutScreen: React.FC = () => {\n\n const classes = useStyles();\n return (\n \n \n \n \n \n )\n}\n\nexport default LoadingWithPlainLayoutScreen;\n","import React, { useMemo } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { setQueryMe, setUserData } from \"../actions/accountActions\";\nimport { INVESTOR } from \"src/graphql/queries/investor\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\nimport { meQuery } from \"src/types/me-types\";\n\nimport LoadingWithPlainLayoutScreen from \"src/components/LoadingWithPlainLayoutScreen\";\nimport { useBrokerFromCookie } from \"src/hooks\";\ninterface authProps {\n children: any;\n}\n\nconst Auth: React.FC = ({ children }) => {\n const dispatch = useDispatch();\n const { addBrokerUsernameToCookie } = useBrokerFromCookie();\n const { loading, data, refetch } = useQuery(INVESTOR);\n\n const me = useMemo(() => {\n if (data?.investor?.__typename === \"InvestorTypeResult\") {\n return data.investor.investor;\n } else return undefined;\n }, [data]);\n\n if (me) {\n dispatch(setUserData(me));\n dispatch(setQueryMe(refetch));\n\n // addBrokerUsernameToCookie(me.broker.name,me.brokerUsername)\n if (me.__typename === \"BitkubInvestor\")\n addBrokerUsernameToCookie(me.broker.name, me.fullName);\n if (me.__typename === \"SettradeInvestor\")\n addBrokerUsernameToCookie(me.broker.name, me.brokerUsername);\n }\n\n if (loading) return ;\n\n return children;\n};\n\nAuth.propTypes = {\n children: PropTypes.any,\n};\n\nexport default Auth;\n","import React, { Fragment, lazy, Suspense } from \"react\";\n\nimport { getCookie } from \"src/utils/utils\";\nimport LoadingScreen from \"src/components/LoadingScreen\";\n\ninterface ClientMockProps {\n children: any;\n}\n\nconst ClientMock: React.FC = ({ children }) => {\n const isMock = getCookie(\"useMock\");\n\n if (isMock === \"true\") {\n const MockContent = lazy(() => import(\"./mock\"));\n return (\n }>\n {children};\n \n );\n }\n\n return {children};\n};\n\nexport default ClientMock;\n","import React,{useMemo,useState} from 'react';\nimport {\n Box,\n Button,\n makeStyles,\n MenuItem,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport { WhitePopup, WhitePopupAction, WhitePopupContent, WhitePopupTitle } from 'src/components/PopUp/PopUpComponents/WhitePopup';\nimport { useQuery } from '@apollo/client';\nimport { BROKERS } from 'src/graphql/queries/brokers';\nimport { brokersQuery, brokerType } from 'src/types/broker-types';\nimport useRouteManager from 'src/utils/customHook/useRouteManager';\nimport { capitalize } from 'src/utils/utils';\nimport { useHistory } from 'react-router';\nimport PlainLayout from 'src/layouts/PlainLayout';\n\nconst useStyles = makeStyles((theme) => ({\n root:{}\n}));\n\nconst InvalidBrokerPage: React.FC= () => {\n\n const classes = useStyles();\n const history = useHistory();\n const { brokerNameOnURL } = useRouteManager()\n const [selectedBroker,setSelectedBroker] = useState(\"default\")\n const { data:Brokers } = useQuery(BROKERS)\n\n const toBroker = (broker:string) => {\n let path = window.location.pathname\n let path_l = path.split(\"/\")\n path_l[1] = broker.toLowerCase()\n let newPath = path_l.join(\"/\")\n\n // history.replace(newPath)\n window.location.pathname = newPath\n }\n\n const brokers = useMemo(()=>{\n if (Brokers?.brokers.__typename === \"Brokers\") {\n setSelectedBroker(Brokers.brokers.brokers[0]?.name || \"default\")\n return Brokers.brokers.brokers\n } else return []\n },[Brokers])\n\n const BrokerSelect = (b:brokerType) => (\n \n {b.name}\n \n )\n\n return (\n
\n \n {}}\n useDark\n >\n \n \n \n {`ไม่พบ ${capitalize(brokerNameOnURL) || \"Broker\"} ในระบบ Finnize`}\n \n \n \n \n ขออภัยเราไม่พบ Broker ที่คุณกำลังค้นหา\n \n \n \n โปรดเลือก Broker จากด้านล่างนี้อีกครั้ง\n \n \n setSelectedBroker(e.target.value)}\n select\n fullWidth\n size=\"small\"\n >\n \n \n {'เลือก Broker ที่คุณกำลังค้นหา'}\n \n \n {brokers.map(BrokerSelect)}\n \n \n \n toBroker(selectedBroker)}\n >\n \n {`เข้าสู่ Finnize สำหรับ ${capitalize(selectedBroker)}`}\n \n \n \n \n \n
\n )\n}\n\nexport default InvalidBrokerPage;\n","import React from 'react';\nimport {\n Box,\n Grow,\n makeStyles, Typography,\n} from '@material-ui/core';\nimport { MainteningIcon } from 'src/components/CustomSVG';\nimport PlainLayout from 'src/layouts/PlainLayout';\n\nconst useStyles = makeStyles((theme) => ({\n root:{\n display:\"flex\",\n flexDirection:\"column\",\n alignItems:\"center\",\n },\n label : {\n color:\"white\",\n fontSize:34,\n fontWeight:600,\n fontFamily:\"NotoSanThai\"\n }\n}));\n\nconst MaintenancePage: React.FC = () => {\n\n const classes = useStyles();\n return (\n \n
\n ขออภัย\n \n บริการนี้อยู่ในช่วงกำลังปรับปรุง\n \n \n
\n
\n )\n}\n\nexport default MaintenancePage;\n","import React, { useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport useRouteManager from \"src/utils/customHook/useRouteManager\";\nimport { useEffect, useState } from \"react\";\nimport { readDefaultBroker } from \"src/utils/utils\";\nimport { useHistory } from \"react-router\";\nimport { COOKIES } from \"src/context/constants\";\nimport useCookie from \"src/hooks/useCookie\";\nimport authService from \"src/services/authService\";\n\nimport { MOCK_SECRET_PATH } from \"src/config\";\nimport InvalidBrokerPage from \"./InvalidBrokerPage\";\n\nimport { setTimeout } from \"timers\";\nimport LoadingWithPlaintLayoutScreen from \"../LoadingWithPlainLayoutScreen\";\nimport MaintenancePage from \"src/views/MaintenancePage\";\n\ninterface authProps {\n children: any;\n}\n\nconst NO_BROKER_URL = [\"stt\", MOCK_SECRET_PATH];\nconst PUBLIC_PATH_SHORTCUT = [\"explore\", \"model\"];\n\nconst MultiBrokerManager: React.FC = ({ children }) => {\n const history = useHistory();\n const loadingRef = useRef(true);\n const [loading, setLoading] = useState(true);\n const [brokerAllInvalid, setBrokerAllInvalid] = useState(false);\n const [isTimeout, setIsTimeout] = useState(false);\n // const [isTimeout,setIsTimeout] = useState(false)\n const { getCookie } = useCookie();\n const { saveBroker, brokerNameOnURL, mapperBrokernameToBroker } =\n useRouteManager();\n\n useEffect(() => {\n setTimeout(() => {\n if (loadingRef.current) {\n setIsTimeout(true);\n }\n }, 10000);\n }, []);\n\n const handleChangeLoading = (val: boolean) => {\n setLoading(val);\n loadingRef.current = val;\n };\n\n const toBroker = (broker: string) => {\n let path = window.location.pathname;\n let path_l = path.split(\"/\");\n path_l[1] = broker;\n let newPath = path_l.join(\"/\");\n // let newPath = `/${broker}/`\n\n history.replace(newPath);\n };\n\n const switchBroker = async (fromBrokerName: string, toBrokerName: string) => {\n const fromBrokerID =\n mapperBrokernameToBroker[fromBrokerName.toLowerCase()]?.brokerID;\n const toBrokerID =\n mapperBrokernameToBroker[toBrokerName.toLowerCase()]?.brokerID;\n const res = await authService.switchBroker(fromBrokerID, toBrokerID);\n //reload only if change success\n // if (data.__typename === \"SwitchBroker\" && data.success) return window.location.reload()\n // if (data.__typename === \"SwitchBroker\" && data.success) return setLoading(false)\n\n handleChangeLoading(false);\n };\n\n //read broker from url ...\n useEffect(() => {\n const search = history.location.search;\n if (Object.keys(mapperBrokernameToBroker).length > 0) {\n const latestBroker = getCookie(COOKIES.latestSelBroker) || \"\";\n let defaultBroker = readDefaultBroker() || \"\";\n\n const isCorrectBroker = !!mapperBrokernameToBroker[brokerNameOnURL];\n const isCorrectLatestBroker = !!mapperBrokernameToBroker[latestBroker];\n\n if (typeof defaultBroker === \"string\")\n defaultBroker = defaultBroker.toLowerCase();\n\n const isCorrectDefaultBroker = !!mapperBrokernameToBroker[defaultBroker];\n\n //preserved word ...\n if (brokerNameOnURL === \"404\") {\n history.push(\"/404\");\n handleChangeLoading(false);\n } else if (NO_BROKER_URL.includes(brokerNameOnURL)) {\n handleChangeLoading(false);\n } else if (PUBLIC_PATH_SHORTCUT.includes(brokerNameOnURL)) {\n history.replace(\n `${\n latestBroker || defaultBroker || \"ENV_MB245\"\n }/${brokerNameOnURL}${search}`\n );\n handleChangeLoading(false);\n } else if (isCorrectBroker) {\n saveBroker(brokerNameOnURL);\n\n //if latest broker and current broker not match then switch access token ...\n if (brokerNameOnURL !== latestBroker) {\n switchBroker(latestBroker, brokerNameOnURL);\n history.replace(\"portfolio\");\n }\n\n //if both are matched then load child components ...\n else handleChangeLoading(false);\n }\n //if brokor invalid (not any in mapper) then swtich to latest broker ...\n else if (isCorrectLatestBroker) {\n saveBroker(latestBroker);\n toBroker(latestBroker);\n handleChangeLoading(false);\n }\n //if latest broker still invalid then use default broker from ENV ...\n else if (isCorrectDefaultBroker) {\n saveBroker(defaultBroker);\n toBroker(defaultBroker);\n handleChangeLoading(false);\n }\n //if cant find env then error code ...\n else {\n // toBroker(\"ENV_MB245\")\n handleChangeLoading(false);\n setBrokerAllInvalid(true);\n }\n }\n // eslint-disable-next-line\n }, [mapperBrokernameToBroker, brokerNameOnURL]);\n\n if (isTimeout) return ;\n if (brokerAllInvalid) return ;\n if (loading) return ;\n\n return children;\n};\n\nMultiBrokerManager.propTypes = {\n children: PropTypes.any,\n};\n\nexport default MultiBrokerManager;\n","import React from 'react';\nimport {\n makeStyles,\n} from '@material-ui/core';\nimport envManager from 'src/utils/EnvManager';\nimport MaintenancePage from 'src/views/MaintenancePage';\n\nconst useStyles = makeStyles((theme) => ({\n root:{}\n}));\n\ninterface ComponentSectionProps {\n children:any,\n}\nconst MaintenanceChecker: React.FC = ({children}) => {\n\n const classes = useStyles();\n\n if (envManager.isMaintenance()) return \n\n return children\n}\n\nexport default MaintenanceChecker;\n","import { AxiosInstance } from \"axios\";\nimport React, { lazy, Suspense } from \"react\";\nimport LoadingScreen from \"src/components/LoadingScreen\";\nimport envManager from \"src/utils/EnvManager\";\nimport { getCookie } from \"src/utils/utils\";\nimport { authenMock } from \"./authenMock\";\nimport { settMock } from \"./sttMock\";\n\nexport const AxiosMock: React.FC = ({ children }) => {\n const isMock = getCookie(\"useMock\");\n\n if (isMock === \"true\") {\n const MockContent = lazy(() => import(\"./mock\"));\n return (\n }>\n {children};\n \n );\n }\n\n return {children};\n};\n\nexport default AxiosMock;\n","import React from \"react\";\nimport { Router } from \"react-router-dom\";\nimport { createBrowserHistory } from \"history\";\nimport { ThemeProvider, CssBaseline } from \"@material-ui/core\";\nimport Routes from \"src/Routes\";\nimport theme from \"src/theme\";\nimport ModalProvider from \"./components/ModalProvider\";\nimport PDPACookie from \"./components/PDPACookie\";\nimport Auth from \"./components/Auth\";\nimport {\n createHttpLink,\n InMemoryCache,\n ApolloClient,\n ApolloLink,\n} from \"@apollo/client\";\nimport { ApolloProvider } from \"@apollo/react-hooks\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { onError } from \"@apollo/client/link/error\"; //add apollo error link\n\nimport GraphQLMock from \"src/mock/GraphQLMock\";\nimport Page from \"src/components/Page\";\nimport { routesConfig } from \"src/Routes/config\";\nimport RouteProp from \"src/Routes/interface\";\n\nimport { GQL_URI } from \"src/config\";\nimport MultiBrokerVerify from \"./components/MultiBrokerManager\";\nimport MaintenanceChecker from \"./components/MaintenanceChecker\";\nimport AxiosMock from \"./mock/axiosMock\";\n\nconst exceptUrl_401: Array = [];\n\nconst makeExceptionURL = (route: Array) => {\n route.forEach((route) => {\n if (route.routes && route.routes?.length !== 0) {\n makeExceptionURL(route.routes);\n } else if (!route.guard && route.path) {\n exceptUrl_401.push(`${route.path}`);\n exceptUrl_401.push(`${route.path}/`);\n } else if (route.guard && route.guard.name !== \"AuthGuard\" && route.path) {\n exceptUrl_401.push(route.path);\n }\n });\n};\n\n// routesConfig.forEach((route) => {\n// console.log(route.path,route.path)\n// if (!route.guard && route.path) {\n// exceptUrl_401.push(`${route.path}`);\n// exceptUrl_401.push(`${route.path}/`);\n// } else if (route.guard && route.guard.name !== \"AuthGuard\" && route.path) {\n// exceptUrl_401.push(route.path);\n// }\n// });\nmakeExceptionURL(routesConfig);\n\nconst httpLink = createHttpLink({\n uri: GQL_URI,\n credentials: \"include\",\n});\n\nconst errorLink = onError(({ graphQLErrors, networkError }) => {\n if (graphQLErrors) {\n // graphQLErrors.map(({ message, locations, path }) =>\n // console.log(\n // `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`,\n // ));\n }\n\n if (networkError) {\n // console.log(`[Network error]: ${networkError}`);\n var res_status = networkError.message.split(\" \").slice(-1)[0];\n // console.log(networkError, res_status);\n if (res_status === \"401\") {\n exceptUrl_401.includes(window.location.pathname)\n ? void 0\n : (window.location.pathname = \"/\");\n }\n }\n});\n\nconst authLink = setContext((_, { headers }) => {\n return {\n headers: {\n ...headers,\n // authorization: `JWT ${localStorage.getItem(\"accessToken\")}`,\n },\n };\n});\n\n// const link = ApolloLink.from([errorLink,retryLink,authLink.concat(httpLink)])\nconst link = ApolloLink.from([errorLink, authLink.concat(httpLink)]);\n\nconst client = new ApolloClient({\n cache: new InMemoryCache(),\n // link: (authLink.concat(httpLink)).concat(errorLink),\n link: link,\n});\n\nfunction App() {\n const history = createBrowserHistory();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry); \n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n}\n\nexport default reportWebVitals;\n","import produce from 'immer';\nimport {\n ActionType,\n} from './types_tmp';\nimport {\n TO_ENGLISH,\n TO_THAI,\n} from 'src/actions/languageActions';\n\n\ninterface LanguageStateType {\n language: string\n}\n\nconst initialState: LanguageStateType = {\n language: \"THAI\"\n}\n\n\nconst languageReducer = (\n state:LanguageStateType=initialState,\n action:ActionType\n) => {\n switch (action.type) {\n case TO_ENGLISH: {\n return produce(state, (draft) => {\n draft.language = \"ENG\"\n })\n }\n\n case TO_THAI: {\n return produce(state, (draft) => {\n draft.language = \"THAI\"\n })\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default languageReducer;","import produce from \"immer\";\nimport {\n\tLOGIN_REQUEST,\n\tLOGIN_SUCCESS,\n\tLOGOUT,\n\tSILENT_LOGIN,\n\tSET_QUERY_ME,\n\tSET_CURRENT_BROKER,\n\tSET_BROKER,\n} from \"src/actions/accountActions\";\nimport { accountAction, accountState } from \"./types/accountTypes\";\n\nconst initialState: accountState = {\n\tuser: undefined,\n\tbroker: undefined,\n\trefetcher: {},\n};\n\nfunction delete_cookie(name: string) {\n\tdocument.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n}\n\nconst accountReducer = (\n\tstate: accountState = initialState,\n\taction: accountAction\n): accountState => {\n\tswitch (action.type) {\n\t\tcase LOGIN_REQUEST: {\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdraft.user = undefined;\n\t\t\t});\n\t\t}\n\t\tcase LOGIN_SUCCESS: {\n\t\t\tconst me = action.payload;\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdraft.user = me;\n\t\t\t});\n\t\t}\n\n\t\tcase LOGOUT: {\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdelete_cookie(\"access_token\");\n\t\t\t\t// window.location.reload();\n\t\t\t\tdraft.user = undefined;\n\t\t\t});\n\t\t}\n\n\t\tcase SILENT_LOGIN: {\n\t\t\tconst me = action.payload;\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdraft.user = me;\n\t\t\t});\n\t\t}\n\n\t\tcase SET_QUERY_ME: {\n\t\t\tconst { queryMe } = action.payload;\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdraft.refetcher.me = queryMe;\n\t\t\t});\n\t\t}\n\n\t\tcase SET_CURRENT_BROKER: {\n\t\t\tconst { broker } = action.payload;\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\tdraft.broker = broker;\n\t\t\t});\n\t\t}\n\n\t\tcase SET_BROKER : {\n\t\t\tconst { broker } = action.payload;\n\t\t\treturn produce(state, (draft) => {\n\t\t\t\t// if (draft.broker?.broker) {\n\t\t\t\t// \tdraft.broker.broker = broker;\n\t\t\t\t// }\n\t\t\t\tdraft.broker = {\n\t\t\t\t\tbroker : broker,\n\t\t\t\t\tbrokerUsername : draft.broker?.brokerUsername || \"\"\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn state;\n\t\t}\n\t}\n};\n\nexport default accountReducer;\n","import produce from 'immer';\nimport {\n SET_DIALOG,\n SET_PHONE,\n} from \"src/actions/modalActions\";\nimport { modalState, modalAction } from './types/modalTypes';\n\nconst initialState: modalState = {\n modalStatus : {},\n prevModal: [],\n opening: \"\",\n phoneNumber: \"\",\n props : {},\n}\n\n\nconst modalReducer = (\n state:modalState=initialState,\n action:modalAction\n) => {\n switch (action.type) {\n case SET_DIALOG: {\n const { name, status, props } = action.payload;\n return produce(state, (draft) => {\n if (draft.opening) {\n draft.modalStatus[name] = status \n if (name !== draft.opening) draft.modalStatus[draft.opening] = false;\n draft.prevModal.push(draft.opening);\n } else {\n draft.modalStatus[name] = status \n }\n if (status) draft.opening = name;\n if (!status) {\n if (name !== draft.opening) draft.prevModal.push(name);\n draft.opening = \"\";\n }\n if (draft.prevModal.length > 5) draft.prevModal.shift();\n draft.props = props\n });\n }\n\n case SET_PHONE: {\n const { phoneNumber } = action.payload;\n return produce(state, (draft) => {\n draft.phoneNumber = phoneNumber || draft.phoneNumber;\n });\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default modalReducer;","import {combineReducers} from 'redux';\nimport {reducer as formReducer} from 'redux-form';\nimport languageReducer from './languageReducer';\nimport accountReducer from './accountReducer';\nimport modalReducer from './modalReducer'\n\n\nconst rootReducer = combineReducers({\n language: languageReducer,\n account: accountReducer,\n form: formReducer,\n modal: modalReducer,\n})\n\nexport type AppState = ReturnType;\nexport default rootReducer;\n","import { applyMiddleware, createStore, compose } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { createLogger } from 'redux-logger';\nimport rootReducer from 'src/reducers';\nimport { ENABLE_REDUX_LOGGER } from 'src/config';\n\nconst loggerMiddleware = createLogger();\n\nexport function configureStore(preloadedState = {}) {\n const middlewares:any = [thunkMiddleware];\n\n if (ENABLE_REDUX_LOGGER) {\n middlewares.push(loggerMiddleware);\n }\n\n const middlewareEnhancer = composeWithDevTools(\n applyMiddleware(...middlewares)\n );\n\n const enhancers = [middlewareEnhancer];\n const composedEnhancers:any = compose(...enhancers);\n\n const store = createStore(rootReducer, preloadedState, composedEnhancers);\n\n return store;\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport \"./global.css\";\nimport { Provider } from \"react-redux\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { configureStore } from \"src/store\";\nimport { SettingsProvider } from \"src/context/SettingsContext\";\nimport { restoreSettings } from \"src/utils/settings\";\n\nconst store = configureStore();\nconst settings = restoreSettings();\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","export const ROLE = {\n finnix_admin : \"FINNIX_ADMIN\",\n broker_admin : \"BROKER_ADMIN\",\n modeler : \"MODELER\"\n}","export const SUBSCRIBE_STATE = {\n\tdefault: 0,\n\tnoSub: 1,\n\thaveSub: 2,\n\teditSub: 3,\n\twaitingUnsub: 4,\n};\n\nexport enum SUBSCRIBE_STATE_ENUM {\n\tdefault,\n\tnoSub,\n\thaveSub,\n\teditSub,\n\twaitingUnsub,\n};","const monthLanguage = {\n \"january\" : \"มกราคม\",\n \"february\" : \"กุมภาพันธ์\",\n \"march\" : \"มีนาคม\",\n \"april\" : \"เมษายน\",\n \"may\" : \"พฤษภาคม\",\n \"june\" : \"มิถุนายน\",\n \"july\" : \"กรกฎาคม\",\n \"august\" : \"สิงหาคม\",\n \"september\" : \"กันยายน\",\n \"october\" : \"ตุลาคม\",\n \"november\" : \"พฤศจิกายน\",\n \"december\" : \"ธันวาคม\",\n \"ytd\" : \"ตั้งแต่ต้นปี\",\n}\n\nexport const getThaiMonth = (month:string|undefined) => {\n if (!month) return \"-\"\n return monthLanguage[month?.toLowerCase() as keyof typeof monthLanguage];\n}","export const COOKIES = {\n latestSelInves : \"latestSelectedInvestorAccount\",\n latestSelBroker : \"latestSelectedBroker\",\n loggedInBrokerUsername : \"loggedInBrokerUsername\",\n\n univalsalLinkCallback : \"univalsalLinkCallback\",\n}","import { keyValueType } from \"src/types/local-types\";\n\nexport const SIGNAL_RESOLUTIONS: Array = [\n {\n key: \"RESOLUTION_15\",\n value: \"15m\",\n },\n {\n key: \"RESOLUTION_60\",\n value: \"1h\",\n },\n {\n key: \"RESOLUTION_240\",\n value: \"4h\",\n },\n {\n key: \"RESOLUTION_1D\",\n value: \"1d\",\n },\n];\n\nexport const SIGNAL_STRATEGY: Array = [\n {\n key: \"STRATEGY_TYPE_TREND_FOLLOWING\",\n value: \"trend\",\n },\n {\n key: \"STRATEGY_TYPE_MEAN_REVERSION\",\n value: \"reversal\",\n },\n];\n\nexport const SIGNAL_CONFIGS = {\n \"2\": {\n mcad: \"MACD Slope Up\",\n ema: \"EMA 20 > EMA 100\",\n },\n \"1\": {\n mcad: \"MACD Slope Down\",\n ema: \"EMA 20 > EMA 100\",\n },\n \"0\": {\n mcad: \"\",\n ema: \"\",\n },\n \"-1\": {\n mcad: \"MACD Slope Up\",\n ema: \"EMA 20 < EMA 100\",\n },\n \"-2\": {\n mcad: \"MACD Slope Down\",\n ema: \"EMA 20 < EMA 100\",\n },\n default: {\n mcad: \"Not enough bars\",\n ema: \"\",\n },\n};\n","import jwtDecode from \"jwt-decode\";\nimport axios from \"src/utils/axios\";\nimport {\n signinInterface,\n regis_phone_response,\n regisWithPhoneNumberProps,\n} from \"auth-types\";\nimport { REST_URI } from \"src/config\";\nimport { eraseCookie } from \"src/utils/utils\";\nimport {\n changeNameUriType,\n addOpenAccountType,\n bitkubRegisterationInputType,\n bitkubRegisterationType,\n settradeRegisterationInputType,\n settradeRegisterationType,\n sttAuthenResponseType,\n sttRegisInputType,\n sttRegisRequestResponseType,\n sttRegisResponseType,\n sttUriType,\n switchBrokerType,\n loginType,\n requestRegisPhoneNoType,\n requestResetPasswordType,\n} from \"./authInterface\";\nimport { errorType } from \"src/types/error-types\";\nimport { clientError } from \"src/context/errors\";\nimport { ERROR_CODE } from \"src/context/constants/errorCode\";\n\nconst makeError = (code: string, message: string) => {\n const error: errorType = {\n __typename: \"Error\",\n code: code,\n message: message,\n };\n\n return error;\n};\n\nconst wrapError = (data: any) => {\n return { ...data, __typename: \"Error\" } as errorType;\n};\n\nclass AuthService {\n logout = async () => {\n this.setSession(null);\n eraseCookie(\"accessToken\");\n try {\n await axios.post(`${REST_URI}/logout`);\n // window.location.reload();\n } catch (err) {}\n };\n\n requestResetPassword = async (brokerID: string, phoneNo: string) => {\n if (!brokerID) return clientError.missingBrokerID;\n if (!phoneNo) return clientError.missingPhoneNo;\n if (phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n if (phoneNo.length !== 10) return clientError.invalidPhoneNo;\n\n try {\n const res = await axios.post(`${REST_URI}/resetPassword/request`, {\n phoneNo: phoneNo,\n brokerID: brokerID,\n });\n if (res.status !== 200) return clientError.requestResetPasswordFail;\n return {\n __typename: \"RequestResetPassword\",\n message: res.data.message,\n success: res.data.success,\n } as requestResetPasswordType;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData?.code === ERROR_CODE.OTP_BAN) return wrapError(errData);\n if (err?.response?.status === 429) return clientError.proxyBlock;\n if (err?.response?.status === 500) return clientError.somethingWentWrong;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.proxyBlock;\n }\n };\n\n resetPassword = (password: string, brokerID: string) =>\n new Promise(async (resolve, reject) => {\n let body = {\n newPassword: password,\n brokerID: brokerID,\n };\n try {\n await axios.post(`${REST_URI}/resetPassword`, body);\n resolve(null);\n } catch (err: any) {\n if (err?.response?.data?.message) reject(err.response.data.message);\n reject(\"Something went wrong :(\");\n }\n });\n\n //registeRequest ... (send phoneNo,brokerID then get otpSession)\n async requestRegisPhoneNo(brokerID: string, phoneNo: string) {\n if (!brokerID) return clientError.missingBrokerID;\n if (!phoneNo) return clientError.missingPhoneNo;\n if (phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n if (phoneNo.length !== 10) return clientError.invalidPhoneNo;\n\n try {\n const res = await axios.post(`${REST_URI}/register/request`, {\n phoneNo: phoneNo,\n brokerID: brokerID,\n });\n if (res.status !== 200) return clientError.requestRegisPhoneNoFail;\n return {\n __typename: \"RequestRegisPhoneNo\",\n message: res.data.message,\n success: res.data.success,\n } as requestRegisPhoneNoType;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData?.code === ERROR_CODE.OTP_BAN) return wrapError(errData);\n if (err?.response?.status === 429) return clientError.proxyBlock;\n if (err?.response?.status === 500) return clientError.somethingWentWrong;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.proxyBlock;\n }\n }\n\n //otpVerify ...\n requestRegisVerifyOTP = (otp: string) =>\n new Promise(async (resolve, reject) => {\n let body = {\n otp: otp,\n };\n try {\n await axios.post(`${REST_URI}/otp/verify`, body);\n resolve(null);\n } catch (err: any) {\n if (err?.response?.data?.message) reject(err.response.data.message);\n else reject(\"something went wrong\");\n }\n });\n\n //final step of registeration\n settradeRegisteration = async (prop: settradeRegisterationInputType) => {\n try {\n if (prop.phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n\n let body = {\n phoneNo: prop.phoneNo,\n fullName: prop.fullName,\n username: prop.username,\n brokerID: prop.brokerID,\n password: prop.password,\n cfPassword: prop.cfPassword,\n };\n\n const res = await axios.post(`${REST_URI}/register/settrade`, body);\n\n if (res.status === 200) {\n const result: settradeRegisterationType = {\n __typename: \"SettradeRegisteration\",\n message: res.data.message,\n success: res.data.success,\n };\n return result;\n }\n return clientError.bitkubRegisFail;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n bitkubRegisteration = async (prop: bitkubRegisterationInputType) => {\n try {\n if (prop.phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n\n let body = {\n brokerID: prop.brokerID,\n phoneNo: prop.phoneNo,\n fullName: prop.fullName,\n password: prop.password,\n cfPassword: prop.cfPassword,\n apiKey: prop.apiKey,\n apiSecret: prop.apiSecret,\n };\n\n const res = await axios.post(`${REST_URI}/register/bitkub`, body);\n if (res.status === 200) {\n const result: bitkubRegisterationType = {\n __typename: \"BitkubRegisteration\",\n message: res.data.message,\n success: res.data.success,\n };\n return result;\n }\n return clientError.bitkubRegisFail;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (err?.response?.status === 429) return clientError.proxyBlock;\n if (err?.response?.status === 500) return clientError.somethingWentWrong;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.proxyBlock;\n }\n };\n\n changePassword = (\n oldPassword: string,\n newPassword: string,\n cfNewPassword: string\n ) =>\n new Promise(async (resolve, reject) => {\n try {\n await axios.post(`${REST_URI}/changePassword`, {\n oldPassword: oldPassword,\n newPassword: newPassword,\n cfNewPassword: cfNewPassword,\n });\n resolve(null);\n } catch (err: any) {\n if (err?.response?.data?.message) {\n reject(err.response.data.message);\n } else {\n reject(\"something went wrong\");\n }\n }\n });\n\n //login ...\n async login(phoneNo: string, brokerID: string, password: string) {\n if (phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n try {\n const res = await axios.post(`${REST_URI}/login`, {\n phoneNo: phoneNo,\n brokerID: brokerID,\n password: password,\n });\n if (res.status !== 200) return clientError.loginFail;\n return {\n __typename: \"Login\",\n message: res.data.message,\n success: res.data.success,\n } as loginType;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (err?.response?.status === 429) return clientError.proxyBlock;\n if (err?.response?.status === 500) return clientError.somethingWentWrong;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.proxyBlock;\n }\n }\n\n changePhoneNoRequest = (body?: any) =>\n new Promise(async (resolve, reject) => {\n try {\n await axios.post(`${REST_URI}/changePhoneNo/request`, body);\n resolve(null);\n } catch (err: any) {\n if (err?.response?.data?.message) reject(err.response.data);\n else reject(\"something went wrong\");\n }\n });\n\n changePhoneNumber = (brokerID: string, newPhoneNo: string) =>\n new Promise(async (resolve, reject) => {\n let body = {\n brokerID: brokerID,\n newPhoneNo: newPhoneNo,\n };\n try {\n let res = await axios.post(`${REST_URI}/changePhoneNo`, body);\n resolve(res);\n } catch (err) {\n reject(err);\n }\n });\n\n verifyOTP = (otp: string) =>\n new Promise(async (resolve, reject) => {\n try {\n await axios.post(`${REST_URI}/otp/verify`, { otp: otp });\n\n resolve(null);\n } catch (err: any) {\n if (err?.response?.data?.message) reject(err.response.data.message);\n else reject(\"something went wrong\");\n }\n });\n\n registerWithPhoneNumber = (\n regisByPhoneNumberGQL: any,\n regisProps: regisWithPhoneNumberProps\n ) =>\n new Promise(async (resolve, reject) => {\n try {\n const res: regis_phone_response = await regisByPhoneNumberGQL({\n variables: regisProps,\n });\n if (res.data.registerWithPhoneNumber.token) {\n let data = res.data.registerWithPhoneNumber;\n this.setSession(data.token);\n var decodedToken: string = jwtDecode(data.token);\n resolve({\n user: data.user,\n decodedToken: decodedToken,\n token: data.token,\n });\n }\n } catch (err: any) {\n if (err?.response?.data?.message) reject(err.response.data.message);\n else reject(\"something went wrong\");\n }\n });\n\n handleAuthentication() {\n const accessToken = this.getAccessToken();\n\n if (!accessToken) {\n return;\n }\n if (this.isValidToken(accessToken)) {\n this.setSession(accessToken);\n } else {\n this.setSession(null);\n }\n }\n\n setSession = (accessToken: any) => {\n if (accessToken) {\n localStorage.setItem(\"accessToken\", accessToken);\n } else {\n localStorage.removeItem(\"accessToken\");\n }\n };\n\n getAccessToken = () => localStorage.getItem(\"accessToken\");\n\n isValidToken = (accessToken: any) => {\n if (!accessToken) {\n return false;\n }\n var decoded: any;\n try {\n decoded = jwtDecode(accessToken);\n } catch (err) {\n decoded = {\n exp: accessToken,\n };\n }\n const currentTime = Date.now() / 1000;\n\n return decoded.exp > currentTime;\n };\n\n loginWithFB = (result: any) => {\n localStorage.setItem(\"accessToken\", result.data_access_expiration_time);\n };\n\n sttAuthen = async (code: string, state: string) => {\n let body = {\n code: code,\n state: state,\n };\n try {\n const res = await axios.post(`${REST_URI}/stt/authen`, body);\n\n if (res.status === 200) {\n const result: sttAuthenResponseType = {\n __typename: \"SttAuthen\",\n accessToken: res.data.accessToken,\n brokerID: res.data.brokerID,\n code: res.data.code,\n requireRegister: res.data.requireRegister,\n brokerUsername: res.data.brokerUsername,\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n sttRegisRequest = async (body?: any) => {\n try {\n const res = await axios.post(`${REST_URI}/stt/register/request`, body);\n\n if (res.status === 200) {\n const result: sttRegisRequestResponseType = {\n __typename: \"SttRegisRequest\",\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n sttRegis = async (body?: sttRegisInputType) => {\n try {\n const res = await axios.post(`${REST_URI}/stt/register`, body);\n\n if (res.status === 200) {\n const result: sttRegisResponseType = {\n __typename: \"SttRegis\",\n success: res.data.success,\n message: res.data.message,\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n sttURI = async () => {\n try {\n const res = await axios.get(`${REST_URI}/stt/request/uri`);\n\n if (res.status === 200) {\n const result: sttUriType = {\n __typename: \"SttURI\",\n callbackUri: res.data.callbackUri,\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n changeNameURI = async () => {\n try {\n const res = await axios.get(`${REST_URI}/change/streaming/request`);\n\n if (res.status === 200) {\n const result: changeNameUriType = {\n __typename: \"changeNameURI\",\n callbackUri: res.data.callbackUri,\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n addOpenAccount = async (phoneNo: string, brokerID: string) => {\n try {\n if (phoneNo[0] !== \"0\") return clientError.phoneNoMustStartWith0;\n\n let body = {\n phoneNo: phoneNo,\n brokerID: brokerID,\n };\n const res = await axios.post(`${REST_URI}/openAccount/add`, body);\n\n if (res.status === 200) {\n const result: addOpenAccountType = {\n __typename: \"AddOpenAccount\",\n message: res.data.message,\n success: res.data.success,\n };\n return result;\n }\n return clientError.somethingWentWrong;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n };\n\n async switchBroker(fromID: string, toID: string) {\n try {\n let body = {\n oldBrokerID: fromID,\n newBrokerID: toID,\n };\n const res = await axios.post(`${REST_URI}/broker/change`, body);\n if (res.status === 200) {\n const result: switchBrokerType = {\n __typename: \"SwitchBroker\",\n message: res.data.message,\n success: res.data.success,\n };\n return result;\n }\n return clientError.swtichBrokerFail;\n } catch (err: any) {\n const errData = err?.response?.data;\n if (errData) return makeError(errData.code, errData.message);\n return clientError.somethingWentWrong;\n }\n }\n\n isAuthenticated = () => !!this.getAccessToken();\n}\nconst authService = new AuthService();\n\nexport default authService;\n","// import { loginWithPhoneNumberProps } from \"auth-type\";\nimport authService from \"src/services/authService\";\nimport {\n\t// loginWithPhoneNumberProps,\n\tregisWithPhoneNumberProps,\n} from \"auth-types\";\nimport { meType } from \"src/types/me-types\";\nimport { broker } from \"src/reducers/types/accountTypes\";\nimport { brokerType } from \"src/types/broker-types\";\n\nexport const LOGIN_REQUEST = \"@account/login-request\";\nexport const LOGIN_SUCCESS = \"@account/login-success\";\nexport const LOGIN_FAILURE = \"@account/login-failure\";\nexport const SILENT_LOGIN = \"@account/silent-login\";\nexport const LOGOUT = \"@account/logout\";\nexport const REGISTER = \"@account/register\";\nexport const SET_QUERY_ME = \"@account/set-query-me\";\nexport const SET_CURRENT_BROKER = \"@account/set-current-broker\";\nexport const SET_BROKER = \"@account/set-broker\";\n\nexport function loginWithPhoneNumber(phoneNo: string, password: string) {\n\treturn async (dispatch: any) => {\n\t\ttry {\n\t\t\tdispatch({ type: LOGIN_REQUEST });\n\t\t} catch (error) {\n\t\t\tdispatch({ type: LOGIN_FAILURE });\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\n// export const login = () =>{\n// return async (dispatch:any) => {\n// try {\n// await authService.login();\n// }\n// catch (error) {\n// dispatch(({ type: LOGIN_FAILURE }));\n// throw error;\n// }\n// }\n// }\n\nexport function regisWithPhoneNumber(\n\tregisByPhoneNumberGQL: any,\n\tregisProps: regisWithPhoneNumberProps\n) {\n\treturn async (dispatch: any) => {\n\t\ttry {\n\t\t\tdispatch({ type: LOGIN_REQUEST });\n\n\t\t\tconst { user } = await authService.registerWithPhoneNumber(\n\t\t\t\tregisByPhoneNumberGQL,\n\t\t\t\tregisProps\n\t\t\t);\n\t\t\tdispatch({\n\t\t\t\ttype: LOGIN_SUCCESS,\n\t\t\t\tpayload: {\n\t\t\t\t\tuser,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdispatch({ type: LOGIN_FAILURE });\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\nexport function setUserData(me: meType) {\n\treturn (dispatch: (e: any) => void) =>\n\t\tdispatch({\n\t\t\ttype: SILENT_LOGIN,\n\t\t\tpayload: me,\n\t\t});\n}\n\nexport function logout() {\n\treturn async (dispatch: (e: any) => void) => {\n\t\tawait authService.logout();\n\n\t\tdispatch({\n\t\t\ttype: LOGOUT,\n\t\t});\n\t};\n}\n\nexport function setQueryMe(queryMe: () => void) {\n\treturn async (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: SET_QUERY_ME,\n\t\t\tpayload: {\n\t\t\t\tqueryMe: queryMe,\n\t\t\t},\n\t\t});\n\t};\n}\n\nexport function setCurrentBroker(broker: broker) {\n\treturn async (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: SET_CURRENT_BROKER,\n\t\t\tpayload: {\n\t\t\t\tbroker,\n\t\t\t},\n\t\t});\n\t};\n\n}\n\nexport function setBroker(broker: brokerType) {\n\treturn async (dispatch: any) => {\n\t\tdispatch({\n\t\t\ttype: SET_BROKER,\n\t\t\tpayload: {\n\t\t\t\tbroker,\n\t\t\t},\n\t\t});\n\t};\n}","export const ERROR_CODE = {\n \"OTP_EXCEED\" : \"CLI-GW-036\",\n \"OTP_BAN\" : \"CLI-GW-043\",\n \"WITHDRAW_PENDING\" : \"CLI-GW-052\",\n \"FRONT_INTERNAL\" : \"FRONT-099\",\n}","import { useQuery } from \"@apollo/client\";\nimport { useCallback } from \"react\";\nimport { useMemo } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useHistory, useLocation } from \"react-router-dom\"\nimport { setBroker } from \"src/actions\";\nimport { COOKIES } from \"src/context/constants\";\nimport { BROKERS } from \"src/graphql/queries/brokers\";\nimport useCookie from \"src/hooks/useCookie\";\nimport authService from \"src/services/authService\";\n// import authService from \"src/services/authService\"\nimport { brokersQuery, brokerType } from \"src/types/broker-types\";\n\ninterface getModelInfoUrlType {\n modelID:string\n modelName:string\n}\n\ninterface mapperBrokerNameToIDType {\n [brokerName:string] : brokerType\n}\n\n\nconst useRouteManager = () => {\n\n const history = useHistory();\n const location = useLocation();\n const dispatch = useDispatch();\n const { data:Brokers } = useQuery(BROKERS)\n const { setCookie } = useCookie()\n\n const brokers = useMemo(()=>{\n if (Brokers?.brokers.__typename === \"Brokers\") \n return Brokers.brokers.brokers.filter(broker => broker.name !== 'bitkub')\n return []\n },[Brokers])\n\n const brokerNameOnURL = useMemo(()=>{\n let bkr = getBrokerNameFromPathname(location.pathname)\n return bkr\n },[location])\n\n \n\n const [mapperBrokernameToBroker,brokerList] = useMemo(()=>{\n const mapper:mapperBrokerNameToIDType = {}\n const brokerList:Array = []\n for (let i=0;i {\n if(mapperBrokernameToBroker && brokerNameOnURL) {\n return mapperBrokernameToBroker[brokerNameOnURL]\n } \n },[mapperBrokernameToBroker, brokerNameOnURL])\n\n const saveBroker = useCallback(async(broker:string)=>{\n if (!broker) return\n if (typeof broker === \"string\") {\n let brokerParsing:brokerType = {\n brokerID:mapperBrokernameToBroker[broker].brokerID,\n name:broker,\n exchange:mapperBrokernameToBroker[broker].exchange\n }\n setCookie(COOKIES.latestSelBroker,broker,14,false)\n dispatch(setBroker(brokerParsing))\n }\n },[mapperBrokernameToBroker,dispatch,setCookie])\n\n async function silenceSwitchBroker(fromBrokerName:string,toBrokerName:string) {\n const fromBrokerID = mapperBrokernameToBroker[fromBrokerName.toLowerCase()].brokerID\n const toBrokerID = mapperBrokernameToBroker[toBrokerName.toLowerCase()].brokerID\n await authService.switchBroker(fromBrokerID,toBrokerID)\n }\n\n\n async function switchBroker(toBrokerName:string) {\n try {\n // const mapper = mapperBrokernameToID\n // const currentBrokerName = getBrokerName()\n // const fromBrokerID = mapper[currentBrokerName.toLowerCase()]\n // const toBrokerID = mapper[toBrokerName.toLowerCase()]\n toBrokerName = toBrokerName.toLowerCase()\n\n let path = window.location.pathname\n let path_l = path.split(\"/\")\n path_l[1] = toBrokerName\n var index = path_l.indexOf('guest');\n if (index !== -1) {\n path_l.splice(index, 1);\n }\n let newPath = path_l.join(\"/\")\n\n // await authService.switchBroker(fromBrokerID,toBrokerID)\n\n // setCookie(COOKIES.latestSelBroker,toBrokerName,3,false)\n // saveBroker(toBrokerName)\n \n window.location.pathname = newPath\n } catch(_) {\n window.location.reload()\n }\n }\n\n function getBrokerName() {\n let path = window.location.pathname\n let path_l = path.split(\"/\")\n if (path_l.length < 1) return \"\"\n return path_l[1]\n }\n\n function getBrokerNameFromPathname(pathname:string) {\n let path_l = pathname.split(\"/\")\n if (path_l.length < 1) return \"\"\n return path_l[1]\n }\n\n function getModelInfoPathname(props:getModelInfoUrlType) {\n const brokerName = getBrokerName()\n const modelPath = `/model?name=${props.modelName}&id=${props.modelID}`\n return \"/\"+brokerName+modelPath\n }\n\n function getRedirectPathname(redirectTo:string) {\n const brokerName = getBrokerName()\n return \"/\"+brokerName+redirectTo\n }\n\n function redirect(to:string) {\n const path = getRedirectPathname(to)\n history.push(path)\n }\n\n const hook = {\n switchBroker,\n silenceSwitchBroker,\n redirect,\n brokerNameOnURL,\n mapperBrokernameToBroker,\n brokerList,\n saveBroker,\n getBrokerName,\n getModelInfoPathname,\n getRedirectPathname,\n brokerID,\n }\n\n return hook\n\n}\n\nexport default useRouteManager","import React, { CSSProperties } from \"react\";\nimport {\n Box,\n Grid,\n Dialog,\n makeStyles,\n useTheme,\n useMediaQuery,\n Typography,\n IconButton,\n Slide,\n} from \"@material-ui/core\";\nimport { TransitionProps } from \"@material-ui/core/transitions\";\nimport clsx from \"clsx\";\n\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport CloseIcon from \"@material-ui/icons/Close\";\n\nconst TransitionUP = React.forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement },\n ref: React.Ref\n) {\n return ;\n});\nconst TransitionLeft = React.forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement },\n ref: React.Ref\n) {\n return ;\n});\n\nconst TransitionRight = React.forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement },\n ref: React.Ref\n) {\n return ;\n});\n\nconst TransitionDown = React.forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement },\n ref: React.Ref\n) {\n return ;\n});\n\n// const Transition= React.forwardRef(function Transition(\n// \tprops: TransitionProps & { children?: React.ReactElement },\n// \tref: React.Ref,\n// \t) {\n// \treturn <>;\n// \t});\n\nexport interface PopUpInterface {\n title?: string;\n open: boolean;\n handleClose: any;\n ExitIcon?: any;\n children: any;\n iconPosition?: \"left\" | \"right\";\n titleAlign?: \"left\" | \"center\" | \"right\";\n direction?: \"down\" | \"left\" | \"right\" | \"up\";\n onBack?: () => void;\n paperStyle?: CSSProperties;\n titleComponent?: React.ReactNode;\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 30,\n padding: theme.spacing(4),\n height: \"100%\",\n },\n dialog: {\n borderRadius: 30,\n },\n closeIcon: {\n color: theme.palette.primary.main,\n position: \"absolute\",\n // left:16,\n },\n iconLeft: {\n left: 16,\n },\n iconRight: {\n right: 16,\n },\n}));\n\nexport const PopUp: React.FC = ({\n open,\n title,\n handleClose,\n ExitIcon,\n direction,\n iconPosition,\n titleAlign,\n children,\n onBack,\n paperStyle,\n titleComponent,\n}) => {\n const classes = useStyles();\n const theme = useTheme();\n\n const getTransitions = () => {\n switch (direction) {\n case \"up\":\n return TransitionUP;\n case \"left\":\n return TransitionLeft;\n case \"right\":\n return TransitionRight;\n case \"down\":\n return TransitionDown;\n default:\n return undefined;\n }\n };\n\n const getDefaultBackIcon = () => {\n if (onBack) {\n switch (direction) {\n case \"up\":\n return ;\n case \"down\":\n // return ;\n return ;\n case \"left\":\n return ;\n case \"right\":\n return ;\n default:\n return ;\n }\n } else return null;\n };\n\n const onExit = () => {\n if (onBack) {\n return onBack();\n }\n handleClose();\n };\n\n const onClickOutSide = () => {\n handleClose();\n };\n\n return (\n \n \n \n \n {ExitIcon || getDefaultBackIcon() || }\n \n {title !== undefined && (\n \n {title}\n \n )}\n {titleComponent}\n \n {children}\n
\n \n );\n};\n","import React, { CSSProperties } from \"react\";\nimport {\n makeStyles,\n Drawer,\n Box,\n IconButton,\n Typography,\n} from \"@material-ui/core\";\n\nimport PerfectScrollbar from \"react-perfect-scrollbar\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\n// import KeyboardArrowLeftIcon from '@material-ui/icons/KeyboardArrowLeft';\nimport CloseIcon from \"@material-ui/icons/Close\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n mobileDrawer: {\n width: 400,\n height: \"100vh\",\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100%\",\n },\n backgroundColor: theme.palette.background.paper,\n },\n title: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\",\n },\n close: {\n // margin:\"-4px -8px\",\n left: 0,\n marginTop: 4,\n color: theme.palette.primary.main,\n position: \"absolute\",\n },\n iconLeft: {\n left: 16,\n },\n iconRight: {\n right: 16,\n },\n alignCenter: {\n textAlign: \"center\",\n },\n}));\n\ninterface BaseDrawerProps {\n open: boolean;\n onClose: () => void;\n ExitIcon?: any;\n anchor?: \"left\" | \"top\" | \"right\" | \"bottom\";\n title?: string;\n children?: any;\n onBack?: () => void;\n paperStyle?: CSSProperties;\n titleComponent?: React.ReactNode;\n}\n\nconst BaseDrawer: React.FC = ({\n onClose,\n open,\n anchor,\n ExitIcon,\n title,\n children,\n onBack,\n paperStyle,\n titleComponent,\n}) => {\n const classes = useStyles();\n\n const getDefaultBackIcon = () => {\n if (onBack) {\n switch (anchor) {\n case \"bottom\":\n return ;\n case \"top\":\n return ;\n case \"right\":\n return ;\n case \"left\":\n return ;\n default:\n return ;\n }\n } else return ;\n };\n\n // const onExit = () => {\n // onClose()\n // }\n\n return (\n \n \n \n \n \n onBack() : () => onClose()}\n >\n {ExitIcon || getDefaultBackIcon()}\n \n {title !== undefined && (\n \n {title}\n \n )}\n {titleComponent}\n \n \n {children}\n \n \n \n \n );\n};\n\nexport default BaseDrawer;\n","import { useMemo } from \"react\";\n\nimport { useMediaQuery, useTheme } from \"@material-ui/core\";\n\nconst DESKTOP_WIDTH = [\"lg\", \"xl\"];\nconst MOBILE_WIDTH = [\"xs\", \"sm\", \"md\"];\n\nfunction useWidth() {\n const theme = useTheme();\n const keys = [...theme.breakpoints.keys].reverse();\n return (\n keys.reduce((output: any, key: any) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const matches = useMediaQuery(theme.breakpoints.up(key));\n return !output && matches ? key : output;\n }, null) || \"xs\"\n );\n}\n\nfunction useLayout() {\n const theme = useTheme();\n const allWidth = [...theme.breakpoints.keys] as const;\n const width: typeof allWidth[number] = useWidth();\n\n const isDesktop = useMemo(() => {\n return DESKTOP_WIDTH.includes(width);\n }, [width]);\n\n const isMobile = useMemo(() => {\n return MOBILE_WIDTH.includes(width);\n }, [width]);\n\n const isXs = useMemo(() => {\n return [\"xs\"].includes(width);\n }, [width]);\n\n return {\n isDesktop: isDesktop,\n isMobile: isMobile,\n rawLayout: width,\n isXs,\n };\n}\n\nexport default useLayout;\n","import { useEffect,useRef } from 'react'\n\n// Hook\nfunction usePrevious(value:any) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n\nexport default usePrevious","import { COOKIES } from \"src/context/constants\";\nimport { loggedInBrokerUsernamesType } from \"src/types/broker-types\";\nimport useCookie from \"./useCookie\"\n\nconst useBrokerFromCookie = () => {\n const { getCookie, setCookie } = useCookie();\n \n const getBrokerUsernameFromCookie = () => {\n let loggedInBrokerUsernamesCookie = getCookie(COOKIES.loggedInBrokerUsername)\n if (typeof loggedInBrokerUsernamesCookie !== \"string\") return {}\n // let loggedInBrokerUsernamesCookieAscii = Buffer.from(loggedInBrokerUsernamesCookie,\"base64\").toString(\"ascii\")\n let loggedInBrokerUsernamesCookieAscii = decodeURIComponent(loggedInBrokerUsernamesCookie)\n let loggedInBrokerUsernames:loggedInBrokerUsernamesType = JSON.parse(loggedInBrokerUsernamesCookieAscii)\n return loggedInBrokerUsernames\n }\n\n const saveBrokerUsernameToCookie = (brokerUsername:loggedInBrokerUsernamesType) => {{\n let loggedInBrokerUsernamesString = JSON.stringify(brokerUsername)\n // let loggedInBrokerUsernamesStringBase64 = Buffer.from(loggedInBrokerUsernamesString).toString(\"base64\")\n let loggedInBrokerUsernamesStringBase64 = encodeURIComponent(loggedInBrokerUsernamesString)\n setCookie(COOKIES.loggedInBrokerUsername,loggedInBrokerUsernamesStringBase64,7)\n }}\n\n const addBrokerUsernameToCookie = (brokerName:string,brokerUsername:string) => {\n const brokerUsernameFromCookie = getBrokerUsernameFromCookie()\n if (typeof brokerUsernameFromCookie === \"undefined\") return\n brokerUsernameFromCookie[brokerName.toLowerCase()] = brokerUsername\n saveBrokerUsernameToCookie(brokerUsernameFromCookie)\n }\n\n const delBrokerUsernameFromCookie = (brokerName?:string) => {\n const brokerUsernameFromCookie = getBrokerUsernameFromCookie()\n if (typeof brokerUsernameFromCookie === \"undefined\") return\n if (!brokerName) return\n delete brokerUsernameFromCookie[brokerName.toLowerCase() ]\n saveBrokerUsernameToCookie(brokerUsernameFromCookie)\n }\n\n return {\n getBrokerUsernameFromCookie,\n saveBrokerUsernameToCookie,\n addBrokerUsernameToCookie,\n delBrokerUsernameFromCookie,\n }\n}\n\nexport default useBrokerFromCookie","import { useMemo } from 'react'\nimport {useSelector} from 'react-redux'\n\nconst useExchange = () => {\n const broker = useSelector(state => state.account.broker)\n \n const exchange = useMemo(()=>{\n return broker?.broker?.exchange\n },[broker])\n\n return exchange\n}\n\nexport default useExchange","import { useMemo } from 'react';\nimport {useSelector} from 'react-redux'\nimport { BROKERS } from 'src/context/constants';\nimport { useProfile } from 'src/utils/customHook'\nimport useRouteManager from 'src/utils/customHook/useRouteManager';\n\nconst useGuess = () => {\n const profile = useProfile();\n const { brokerNameOnURL } = useRouteManager();\n\n const isBitkubGuess = useMemo(()=>{\n if (!profile && brokerNameOnURL === BROKERS.bitkub.name) return true\n return false\n },[profile,brokerNameOnURL])\n\n return {\n isBitkubGuess\n }\n}\n\nexport default useGuess","import React, {useEffect} from 'react';\nimport NProgress from 'nprogress';\nimport { makeStyles } from '@material-ui/core';\nimport { Spinner } from '../Loaders';\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding:\"48px 0px\",\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n // backgroundColor: theme.palette.background.default,\n height: '100%',\n justifyContent: 'center',\n }\n}));\n\n\nfunction LoadingScreen() {\n const classes = useStyles();\n\n useEffect(() => {\n NProgress.start();\n\n return () => {\n NProgress.done();\n };\n }, []);\n\n return (\n
\n\n {/* */}\n \n
\n );\n}\n\nexport default LoadingScreen;","import React, { createContext, useContext } from \"react\";\nimport { makeStyles, Dialog, Box } from \"@material-ui/core\";\n\ntype ContextProps = {\n variant: \"confirmation\" | \"response\";\n color: \"primary\" | \"secondary\";\n};\n\nconst WhitePopupContext = createContext>({});\n\nexport const useTableOverviewContext = () => {\n return useContext(WhitePopupContext);\n};\n\nconst SuccessIconSecondary = () => (\n \n \n \n);\n\nconst SuccessIconPrimary = () => (\n \n {\" \"}\n \n);\n\nconst WaitingIconPrimary = () => (\n \n \n \n \n);\n\nconst AwareIconSecondary = () => (\n \n \n \n);\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // backgroundColor:\"white\",\n },\n paper: {\n backgroundColor: \"white\",\n margin: 0,\n },\n paperDark: {\n backgroundColor: \"#141719\",\n margin: 0,\n },\n paperFullWidth: {\n width: \"100%\",\n borderRadius: 8,\n },\n}));\n\ninterface WhitePopupProps {\n open: boolean;\n onClose: () => void;\n variant: \"confirmation\" | \"response\";\n color: \"primary\" | \"secondary\";\n icon?:\n | \"successPrimary\"\n | \"successSecondary\"\n | \"waitingPrimary\"\n | \"awareSecondary\";\n useDark?: boolean;\n}\nconst WhitePopup: React.FC = ({\n onClose,\n open,\n variant,\n icon,\n color,\n useDark,\n children,\n}) => {\n const classes = useStyles();\n\n const WhitePopupStore = {\n variant: variant,\n color: color,\n };\n\n const paparProps = {\n classes: {\n root: useDark ? classes.paperDark : classes.paper,\n },\n };\n\n return (\n \n \n \n {variant === \"response\" && (\n \n {!icon && color === \"primary\" && }\n {!icon && color === \"secondary\" && }\n {icon === \"successPrimary\" && }\n {icon === \"successSecondary\" && }\n {icon === \"waitingPrimary\" && }\n {icon === \"awareSecondary\" && }\n \n )}\n {children}\n \n \n \n );\n};\n\nexport default WhitePopup;\n","import React from 'react';\nimport {\n makeStyles,\n Box,\n} from '@material-ui/core';\n// import { useTableOverviewContext } from './WhitePopup'\n\nconst useStyles = makeStyles((theme) => ({\n root:{\n paddingTop: theme.spacing(3),\n },\n}));\n\ninterface WhitePopupActionProps {\n children : any\n}\nconst WhitePopupAction: React.FC = ({\n children\n}) => {\n\n const classes = useStyles();\n // const { color,variant } = useTableOverviewContext();\n\n return (\n
\n \n {children}\n \n
\n )\n}\n\nexport default WhitePopupAction;\n","import React from \"react\";\nimport {\n\tmakeStyles,\n\tTypography,\n\t// useTheme,\n} from \"@material-ui/core\";\nimport { useTableOverviewContext } from \"./WhitePopup\";\n\nconst useStyles = makeStyles((theme) => ({\n\troot: {},\n\tlightSecondary: {\n\t\tcolor: \"rgba(0, 0, 0, 0.54)\",\n\t},\n}));\n\ninterface WhitePopupContentProps {\n\tchildren: any;\n\tcolor?:\n\t\t| \"initial\"\n\t\t| \"inherit\"\n\t\t| \"primary\"\n\t\t| \"secondary\"\n\t\t| \"textPrimary\"\n\t\t| \"textSecondary\"\n\t\t| \"error\";\n}\nconst WhitePopupContent: React.FC = ({\n\tchildren,\n\tcolor,\n}) => {\n\tconst classes = useStyles();\n\t// const theme = useTheme();void\n\tconst { variant } = useTableOverviewContext();\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t
\n\t);\n};\n\nexport default WhitePopupContent;\n","import React from 'react';\nimport {\n makeStyles,\n Typography,\n} from '@material-ui/core';\nimport { useTableOverviewContext } from './WhitePopup'\n\nconst useStyles = makeStyles((theme) => ({\n root:{\n paddingBottom : theme.spacing(3),\n }\n}));\n\ninterface WhitePopupTitleProps {\n children : any\n}\nconst WhitePopupTitle: React.FC = ({\n children\n}) => {\n\n const classes = useStyles();\n const { variant } = useTableOverviewContext();\n\n return (\n
\n \n {children}\n \n
\n )\n}\n\nexport default WhitePopupTitle;\n","import { useProfile } from 'src/utils/customHook';\n\nconst useCookie = () => {\n const profile = useProfile()\n\n\n \n const setCookie = async (name:string,value:any,days:number,belongToUser:boolean = false) => {\n var expires = \"\";\n\n if (belongToUser) {\n const investorID = profile?.investorId\n name = investorID+name\n // name = Buffer.from(investorID+name).toString(\"base64\")\n // value = Buffer.from(value).toString(\"base64\")\n }\n\n name = Buffer.from(name).toString(\"base64\")\n name = name.slice(0,8) + name.slice(-4)\n\n value = Buffer.from(value).toString(\"base64\")\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n }\n\n const getCookie = (name:string,belongToUser:boolean = false) => {\n\n if (belongToUser) {\n const investorID = profile?.investorId\n // name = Buffer.from(investorID+name).toString(\"base64\")\n name = investorID+name\n }\n\n name = Buffer.from(name).toString(\"base64\")\n name = name.slice(0,8) + name.slice(-4)\n\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(\";\");\n var value = \"\"\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n value = c.substring(nameEQ.length, c.length);\n return Buffer.from(value,\"base64\").toString(\"ascii\")\n }\n }\n return null;\n }\n\n const eraseCookie = (name:string,belongToUser:boolean = false) => {\n\n if (belongToUser) {\n const investorID = profile?.investorId\n name = Buffer.from(investorID+name).toString(\"base64\")\n }\n\n name = name.slice(0,8) + name.slice(-4)\n\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n }\n\n const hook = {\n setCookie:setCookie,\n getCookie:getCookie,\n eraseCookie:eraseCookie,\n }\n\n return hook\n\n}\n\nexport default useCookie;","export const SET_DIALOG = \"@dialog/set-dialog\";\nexport const SET_PHONE = \"@dialog/set-phone\";\n\n\nexport function setDialog(name:string, status:Boolean, props?:any) {\n return async (dispatch:(val:any)=>void ) => {\n try {\n dispatch({\n type: SET_DIALOG,\n payload: {\n name: name,\n status: status,\n props: props,\n },\n });\n } catch (_) {\n }\n };\n}\n\nexport function setPhone(phoneNumber:string) {\n return async (dispatch:(val:any)=>void ) => {\n try {\n dispatch({\n type: SET_PHONE,\n payload: {\n phoneNumber: phoneNumber,\n },\n });\n } catch (_) {\n }\n };\n}"],"sourceRoot":""}