{"version":3,"sources":["hooks/reduxHooks.ts","components/ui/uiSlice.tsx","helpers/constants.ts","components/auth/authFireBaseAPI.tsx","components/auth/authSlice.tsx","components/ui/toast.tsx","components/ui/header.tsx","components/ui/menuItem.tsx","components/ui/reactP5WrapperComponent.tsx","components/p5sketches/trees/branch.tsx","components/p5sketches/fireworks/particle.tsx","components/p5sketches/fireworks/firework.tsx","components/p5sketches/trees/sketchLive.ts","components/p5sketches/fireworks/fireworksModels.ts","components/ui/p5Sketch.tsx","components/home/homeContent.tsx","components/ui/pageTitle.tsx","pages/home.tsx","pages/dashboard.tsx","components/userAccounts/wallets/accountModels.ts","components/userAccounts/bankAccountSlice.tsx","components/userAccounts/BankAccountCard.tsx","pages/accounts/bankAccount.tsx","components/userAccounts/connectors.ts","components/userAccounts/wallets/ethWalletBalance.tsx","components/userAccounts/ETHWalletCard.tsx","pages/accounts/walletsAccounts.tsx","components/user/profileForm.tsx","components/user/userProfile.tsx","pages/settings.tsx","components/ui/loadingIndicator.tsx","components/auth/authForm.tsx","pages/authPage.tsx","pages/stellar.tsx","pages/invest.tsx","config/index.ts","components/ui/appMenu.tsx","components/ui/navigation.tsx","components/ui/footer.tsx","components/ui/layout.tsx","theme/appTheme.ts","app.tsx","components/counter/counterAPI.ts","components/counter/counterSlice.ts","appStore/store.tsx","reportWebVitals.ts","serviceWorker.ts","index.tsx"],"names":["useAppDispatch","useDispatch","useAppSelector","useSelector","uiSlice","createSlice","name","initialState","isLoading","notification","status","message","reducers","showToast","state","action","payload","hideToast","updateToastMessage","animateToastMessage","selectUI","ui","uiActions","actions","APP_TITLE","FOOTER_TEXT","Date","getFullYear","PAGE_TITLE_HOME","PAGE_TITLE_DASHBOARD","SUBPAGE_TITLE_BANK","SUBPAGE_TITLE_ETH","PAGE_TITLE_SETTINGS","DRAWER_WIDTH","LoadFirebaseLoginDataAsync","createAsyncThunk","loginParams","thunkAPI","a","response","data","idToken","email","refreshToken","expiresIn","localId","registered","dispatch","sendRequest","fetch","method","body","JSON","stringify","password","secret","returnSecureToken","headers","fbresponse","ok","json","tokenFieldKey","expriresTimeKey","calRemaingTime","tokenexpiresIn","currentTime","getTime","authSlice","tokenValue","localStorage","getItem","remainingTimeVale","token","isLoggedIn","remainingTime","isAuthLoading","provider","getInitialAuthState","replaceLoginData","tr","toString","setItem","setFBLoginData","setMetaMaskLoginData","addressKey","saveLogoutTimer","logout","removeItem","extraReducers","builder","addCase","pending","fulfilled","remainingTimeValue","authActions","selectAuth","auth","useStyles","makeStyles","theme","createStyles","toast","margin","width","maxQidth","borderRadius","backgroundColor","palette","secondary","main","boxShadow","primary","padding","textAlign","error","display","color","text","fontWeight","marginBottom","success","marginTop","flexDirection","alignItems","Toasted","props","classes","statusClasses","toastMessage","cssClasses","className","appBar","zIndex","drawer","transition","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","marginLeft","enteringScreen","toolbar","flex","title","menuButton","marginRight","hide","imageIcon","height","iconRoot","Header","open","handleMenuOpen","handleMetaMaskConnect","handleRabetConnect","handleDisconnect","toggleTheme","useDefaultTheme","authState","useHistory","CssBaseline","AppBar","position","elevation","clsx","Toolbar","IconButton","aria-label","onClick","edge","size","Typography","variant","noWrap","Tooltip","placement","Icon","root","src","style","selected","transitionDuration","nested","spacing","listItemDisabled","cursor","MenuItem","route","location","useLocation","to","path","textDecoration","e","enabled","preventDefault","tooltip","ListItem","button","disabled","ListItemIcon","pathname","component","icon","DefaultIcon","ListItemText","key","createCanvas","sketch","container","p5","Branch","start","end","p","begin","p5I","isFinished","girth","jitterValue","this","x","random","y","colorValue","branchGirth","stroke","line","angle","placment","direction","Vector","sub","rotate","Number","mult","rightEnd","add","Math","PI","leftEnd","tree","ParticleClass","hu","isFirework","screenLocation","lifespan","hue","acc","speed","createVector","random2D","force","colorMode","HSB","strokeWeight","point","FireWorkClass","displayField","displayHeight","gravity","firework","particles","exploded","length","applyForce","update","explode","i","done","splice","push","show","SketchLive","treeArray","count","fireworks","undefined","setup","background","startVector","endVector","rndNumberofBranches","index","createRightBranch","createLeftBranch","TreeSetUp","draw","drawTree","RGB","justifyContent","paper","minHeight","footer","textTransform","P5Sketch","memo","React","useState","isFirstLoaded","setFirstLoad","wrapper","createRef","instance","setInstance","useEffect","current","remove","canvas","ref","content","flexGrow","overflow","paddingTop","paddingBottom","fixedHeight","StartingPageContent","fixedHeightPaper","Container","Card","PageTitle","Home","Helmet","Dashboard","BankAccountProviders","initialBankAccountState","isLoaded","providerToken","GetPlaidLinkToken","userID","createLinkToken","urlPath","resp","console","log","GetBankAccountInfo","publicToken","tokenExchange","usePlaid","bankAccountSlice","selectBankAccount","userBankAccounts","BankAccountCard","history","bankAccountState","alert","bankInfo","replace","CardHeader","CardActions","Button","type","BankPage","injected","process","RPC_URL_1","RPC_URL_4","InjectedConnector","supportedChainIds","WalletBalance","useWeb3React","account","library","chainId","balance","setBalance","stale","getBalance","then","catch","CardContent","formatEther","control","label","input","ETHWalletCard","web3React","connector","activate","deactivate","active","activatingConnector","setActivatingConnector","subheader","WalletPage","toggle","contrastText","border","ProfileForm","passwordInputRef","useRef","onSubmit","event","value","htmlFor","id","UserProfile","Settings","LoadingIndicator","CircularProgress","AuthForm","userEmailRef","userSecRef","currentLoginProvider","switchAuthModeHandler","enteredEmail","enteredPassword","required","AuthPage","StellarDash","InvestDash","Loadroutes","routes","WalletIcon","appendDivider","DashboardIcon","CompoundPage","CompoundIcon","InvestPage","InvestIcon","subRoutes","BankIcon","EthIcon","UserIcon","SettingsIcon","divider","Menu","setOpen","handleClick","List","map","some","item","Collapse","in","timeout","unmountOnExit","sRoute","Divider","flexShrink","whiteSpace","drawerOpen","drawerClose","overflowX","breakpoints","up","mixins","default","Navigation","handleMenuClose","Drawer","htmlColor","Footer","Link","href","REACT_APP_API_URL","target","rel","contentShift","easeOut","Layout","children","useReducer","connectMetaMaskHandler","args","connectRabetHandler","lightTheme","createMuiTheme","info","warning","pink","typography","fontFamily","fontSize","fontWeightMedium","body1","body2","subtitle1","fontStyle","darkTheme","deepPurple","yellow","AppContext","createContext","DefaultComponent","getLibrary","ethers","providers","Web3Provider","detectNetwork","pollingInterval","App","uiState","responsiveFontSizes","setTimeout","toastMessageState","Provider","ThemeProvider","exact","fetchCount","amount","Promise","resolve","incrementAsync","counterSlice","increment","decrement","incrementByAmount","store","configureStore","reducer","counter","counterReducer","authReducer","uiReducer","bankAccountReducer","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","Boolean","window","hostname","match","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.2dd2e15f.chunk.js","sourcesContent":["import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport type { RootState, AppDispatch } from '../appStore/store';\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch();\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n","import { createAsyncThunk, createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\n\r\nimport { ToastItem, UIState } from \"./uiModels\";\r\nimport { RootState, AppThunk } from \"../../appStore/store\";\r\n\r\nconst initialUIState: UIState = {\r\n isLoading: false,\r\n notification: {\r\n status: \"Idel\",\r\n message: \"\",\r\n },\r\n};\r\n\r\nconst uiSlice = createSlice({\r\n name: \"ui\",\r\n initialState: initialUIState,\r\n reducers: {\r\n showToast(state, action: PayloadAction) {\r\n state.notification = action.payload;\r\n },\r\n hideToast(state) {\r\n //Hide Toast\r\n state.isLoading = false;\r\n state.notification.status = \"Idel\";\r\n },\r\n updateToastMessage(state, action: PayloadAction) {\r\n state.notification.message = action.payload;\r\n },\r\n animateToastMessage(state, action: PayloadAction) {\r\n //for future use\r\n //state.notification.message = action.payload;\r\n },\r\n },\r\n});\r\n\r\n//export State interface\r\nexport const selectUI = (state: RootState) => state.ui;\r\n\r\nexport const uiActions = uiSlice.actions;\r\n\r\nexport default uiSlice.reducer;\r\n","// APP TEXT\nexport const APP_TITLE = \"Crypto Rio Market\";\nexport const FOOTER_TEXT = `${new Date().getFullYear()} @CRYORIO LLC`;\n\n// PAGES TITLE\nexport const PAGE_TITLE_HOME = \"Home\";\nexport const PAGE_TITLE_AUTH = \"Login/Signup\";\nexport const PAGE_TITLE_AUTH_SIGNUP = \"Signup\";\nexport const PAGE_TITLE_AUTH_LOGIN = \"Login/Signup\";\nexport const PAGE_TITLE_DASHBOARD = \"Dashboard\";\nexport const PAGE_TITLE_ACCOUNTS = \"Accounts\";\nexport const SUBPAGE_TITLE_BANK = \"Bank\";\nexport const SUBPAGE_TITLE_ETH = \"Etherem\";\nexport const SUBPAGE_TITLE_XLM = \"Stellar\";\nexport const PAGE_TITLE_SETTINGS = \"Settings\";\n// UI CONSTANTS\nexport const Sketch_HEIGHT = 300;\nexport const Sketch_WIDTH = 500;\nexport const FOOTER_HEIGHT = 30;\nexport const HEADER_HEIGHT = 60;\nexport const DRAWER_WIDTH = 250;\nexport const PAGE_WIDTH = 500;\n//Error Window CONSTANTS\nexport const ERRORWIN_TOP = `30vh`;\nexport const ERRORWIN_LEFT = `15rem`;\nexport const ERRORWIN_WIDTH = `30rem`;\n//Auth Provider and Database keys comes from .env\nexport const FIREBASE_APIKEY = \"AIzaSyC9q_8eQGjKTHcvV-QCjy8UK61jnqb5Tkw\";\nexport const PLAID_CLIENT_ID=\"608336c497bb9a00116921b3;\"\nexport const PLAID_SECRET=\"4666cc684b82d97367074ff2520b1e\";\nexport const Stellar_IssuerAct = \"GBW3KKPZJXDWIQKMN6ZTM4PFK5K5NSAREQHIBWAYT6BRAFF6OTDF754N\";\nexport const Stellar_DistAct = \"GDA5NSJ5AA4SD7DQ32ZE3XNRN5EDHW6P26OYRCZSUXWA5OJ6PABBAOEA\";\nexport const CPT_Act = \"\";\n\nexport const StellarAnchorClient_SKEY = \"\";","\r\nimport {createAsyncThunk,} from \"@reduxjs/toolkit\";\r\nimport {FB_AuthLoginResponse,AuthFireBaseLogInReq} from \"./authModels\";\r\nimport { FIREBASE_APIKEY } from \"../../helpers/constants\";\r\nimport { uiActions } from \"../../components/ui/uiSlice\";\r\n\r\n //values for Firebase API Post commands\r\nconst apiSignInCommandNameName = \"signInWithPassword\";\r\nconst apiSignUPCommandName = \"signUp\";\r\n\r\n\r\n// The function below is called a thunk and allows us to perform async logic. It\r\n// can be dispatched like a regular action: `dispatch(incrementAsync(10))`. This\r\n// will call the thunk with the `dispatch` function as the first argument. Async\r\n// code can then be executed and other actions can be dispatched. Thunks are\r\n// typically used to make async requests.\r\nexport const LoadFirebaseLoginDataAsync = createAsyncThunk(\r\n\"api/firebase/login\",\r\nasync (loginParams: AuthFireBaseLogInReq, thunkAPI) => {\r\n //set initstate for respn\r\n let response = {\r\n data: {\r\n idToken: \"\",\r\n email: \"\",\r\n refreshToken: \"\",\r\n expiresIn: \"0\",\r\n localId: \"\",\r\n registered: false,\r\n },\r\n };\r\n\r\n thunkAPI.dispatch(\r\n uiActions.showToast({\r\n status: \"loading\",\r\n message: \"Trying to log you in.\",\r\n })\r\n );\r\n\r\n // The value we return becomes the `fulfilled` action payload\r\n //So here we need to do other Login Task\r\n const sendRequest = async () => {\r\n let fbresponse = await fetch(\r\n `https://identitytoolkit.googleapis.com/v1/accounts:${apiSignInCommandNameName}?key=${FIREBASE_APIKEY}`,\r\n {\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n email: loginParams.email,\r\n password: loginParams.secret,\r\n returnSecureToken: true,\r\n }),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n }\r\n );\r\n\r\n if (!fbresponse.ok) {\r\n return {\r\n idToken: \"\",\r\n email: \"\",\r\n refreshToken: \"\",\r\n expiresIn: \"0\",\r\n localId: \"\",\r\n registered: false,\r\n };\r\n } else {\r\n return fbresponse.json();\r\n }\r\n };\r\n\r\n try {\r\n let data: FB_AuthLoginResponse = await sendRequest();\r\n //convert to type\r\n if (data.registered) {\r\n thunkAPI.dispatch(uiActions.updateToastMessage(\"Great You made it!\"));\r\n thunkAPI.dispatch(uiActions.hideToast());\r\n //Dispach Login\r\n response = { data: data };\r\n\r\n // setTimeout(authSlice.actions.logout, 3000);\r\n } else {\r\n //\r\n thunkAPI.dispatch(uiActions.updateToastMessage(\"\"));\r\n thunkAPI.dispatch(\r\n uiActions.showToast({\r\n status: \"error\",\r\n message: \"Try again Buster!.\",\r\n })\r\n );\r\n }\r\n } catch {\r\n //Disptach error message\r\n }\r\n return response;\r\n }\r\n);\r\n","import { Email } from '@material-ui/icons';\r\nimport { createSlice, PayloadAction} from '@reduxjs/toolkit';\r\n//look in to ThunkDispatch;\r\nimport { useAppSelector, useAppDispatch } from \"../../hooks/reduxHooks\";\r\nimport { RootState, AppThunk } from '../../appStore/store';\r\n\r\nimport {LoadFirebaseLoginDataAsync} from \"./authFireBaseAPI\";\r\nimport {\r\n AuthTokenState,\r\n FB_AuthLoginResponse,\r\n MetaMask_ConnectResponse,\r\n} from \"./authModels\";\r\n\r\n\r\nconst tokenFieldKey = 'idToken';\r\nconst expriresTimeKey = 'expiresIn';\r\nconst logInProviderKey = \"logInProvider\";\r\n\r\nconst calRemaingTime = (tokenexpiresIn:string):number =>{\r\n const currentTime = new Date().getTime();\r\n const adjTime = new Date(tokenexpiresIn).getTime();\r\n return (adjTime - currentTime);\r\n\r\n};\r\n\r\n//Create the initialAuthState for Authentication\r\nconst getInitialAuthState = (): AuthTokenState => {\r\n let tokenValue = localStorage.getItem(tokenFieldKey);\r\n let remainingTimeVale = localStorage.getItem(expriresTimeKey);\r\n let loginProviderValue = localStorage.getItem(logInProviderKey);\r\n let LoggedIn = tokenValue !== null ? true : false;\r\n let token: string = tokenValue !== null ? tokenValue : \"\";\r\n let remainingTime: number =\r\n remainingTimeVale !== null ? calRemaingTime(remainingTimeVale) : 0;\r\n let loginProvider = loginProviderValue ? loginProviderValue : \"MetaMask\";\r\n\r\n return {\r\n token: token,\r\n isLoggedIn: LoggedIn,\r\n remainingTime: remainingTime,\r\n isAuthLoading: false,\r\n provider: \"MetaMask\",\r\n };\r\n}; ;\r\n\r\n\r\n\r\n\r\n\r\n//Api calls use the thunk\r\n// We can also write thunks by hand, which may contain both sync and async logic.\r\n// Here's an example of conditionally dispatching actions based on current state.\r\nexport const ExampleThunk = (amount: number): AppThunk => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const currentValue = selectCount(getState());\r\n // if (currentValue % 2 === 1) {\r\n // dispatch(incrementByAmount(amount));\r\n //}\r\n};\r\n//Create AuthSlice using the reduxjs/toolkit createSlice method\r\n\r\nexport const authSlice = createSlice({\r\n name: \"authentication\",\r\n initialState: getInitialAuthState(),\r\n // The `reducers` field lets us define reducers and generate associated actions\r\n reducers: {\r\n replaceLoginData: (state, action: PayloadAction) => {\r\n state = action.payload;\r\n let tr = calRemaingTime(action.payload.remainingTime.toString());\r\n localStorage.setItem(tokenFieldKey, action.payload.token);\r\n localStorage.setItem(\r\n expriresTimeKey,\r\n action.payload.remainingTime.toString()\r\n );\r\n if (action.payload.token) {\r\n state.token = action.payload.token;\r\n state.isLoggedIn = true;\r\n state.remainingTime = tr;\r\n }\r\n },\r\n setFBLoginData: (state, action: PayloadAction) => {\r\n //Here we set the AuthTokenState\r\n state.isAuthLoading = false;\r\n //Set time remaining value\r\n let tr = calRemaingTime(action.payload.expiresIn);\r\n //Log user out when Timer expires\r\n // setTimeout(authSlice.actions.logout, tr);\r\n if (action.payload.idToken) {\r\n state.token = action.payload.idToken;\r\n state.isLoggedIn = true;\r\n state.remainingTime = tr;\r\n }\r\n },\r\n setMetaMaskLoginData: (\r\n state,\r\n action: PayloadAction\r\n ) => {\r\n //Here we set the AuthTokenState\r\n state.isAuthLoading = false;\r\n //Set time remaining value\r\n //let tr = calRemaingTime(\"36000000\");\r\n //Log user out when Timer expires\r\n // setTimeout(authSlice.actions.logout, tr);\r\n if (action.payload.addressKey) {\r\n state.token = action.payload.addressKey;\r\n state.isLoggedIn = true;\r\n state.remainingTime = 360000000;\r\n }\r\n },\r\n saveLogoutTimer: (state) => {},\r\n\r\n logout: (state) => {\r\n state.isLoggedIn = false;\r\n localStorage.removeItem(tokenFieldKey);\r\n localStorage.removeItem(expriresTimeKey);\r\n },\r\n },\r\n\r\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\r\n // including actions generated by createAsyncThunk or in other slices.\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(LoadFirebaseLoginDataAsync.pending, (state) => {\r\n state.isAuthLoading = true;\r\n })\r\n .addCase(LoadFirebaseLoginDataAsync.fulfilled, (state, action) => {\r\n state.isAuthLoading = false;\r\n if (action.payload.data.idToken === \"\") {\r\n state.isLoggedIn = false;\r\n } else {\r\n //Set time remaining value\r\n let remainingTimeValue = new Date(\r\n new Date().getTime() + +action.payload.data.expiresIn * 1000\r\n );\r\n let tr = calRemaingTime(remainingTimeValue.toString());\r\n localStorage.setItem(tokenFieldKey, action.payload.data.idToken);\r\n localStorage.setItem(expriresTimeKey, tr.toString());\r\n if (action.payload.data.idToken) {\r\n state.token = action.payload.data.idToken;\r\n state.isLoggedIn = true;\r\n state.remainingTime = tr;\r\n }\r\n }\r\n });\r\n },\r\n});\r\n\r\n//export methods needed for components\r\nexport const authActions = authSlice.actions;\r\n\r\n//export State interface\r\nexport const selectAuth = (state: RootState) => state.auth;\r\n\r\n\r\n\r\nexport default authSlice.reducer;","import { useRef, useContext,useEffect} from 'react';\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport {ToastItem} from \"./uiModels\";\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n toast: {\r\n margin: `3rem auto`,\r\n width: `100%`,\r\n maxQidth: `25rem`,\r\n borderRadius: `6px`,\r\n backgroundColor: theme.palette.secondary.main,\r\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\r\n padding: `1rem`,\r\n textAlign: `left`,\r\n },\r\n error: {\r\n display: `block`,\r\n color: theme.palette.text.secondary,\r\n fontWeight: `bold`,\r\n marginBottom: '0.5rem',\r\n },\r\n success : {\r\n marginTop: `1.5rem`,\r\n display: `flex`,\r\n flexDirection: `column`,\r\n alignItems: `center`,\r\n },\r\n})\r\n);\r\n\r\nconst Toasted: React.FC<{toastMessage:ToastItem}> = (props) => {\r\n const classes = useStyles();\r\n\r\n let statusClasses = \"\";\r\n\r\n if (props.toastMessage.status === 'error') {\r\n statusClasses = classes.error;\r\n }\r\n if (props.toastMessage.status === \"success\") {\r\n statusClasses = classes.success;\r\n }\r\n if (props.toastMessage.status === \"loading\") {\r\n statusClasses = classes.success;\r\n }\r\n if (props.toastMessage.status === \"Idel\") {\r\n statusClasses = classes.success;\r\n }\r\n\r\n const cssClasses = `${classes.toast} ${statusClasses}`;\r\n\r\n return (\r\n
\r\n

{props.toastMessage.message}

\r\n
\r\n );\r\n};\r\n\r\nexport default Toasted;","import React, { ReactElement, FC } from \"react\";\nimport clsx from \"clsx\";\nimport Icon from \"@material-ui/core/Icon\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { useHistory } from 'react-router-dom';\nimport {\n AppBar,\n Toolbar,\n CssBaseline,\n Typography,\n IconButton,\n Tooltip,\n} from \"@material-ui/core\";\n\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport Brightness7Icon from \"@material-ui/icons/Brightness7\";\nimport Brightness3Icon from \"@material-ui/icons/Brightness3\";\nimport UserIcon from \"@material-ui/icons/AccountCircle\";\nimport LogoutIcon from \"@material-ui/icons/ExitToAppOutlined\";\nimport LogoutIN from \"@material-ui/icons/MeetingRoom\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n// constants\nimport { APP_TITLE, DRAWER_WIDTH } from \"../../helpers/constants\";\n//Use Redux hooks to get to see user is logged in and get actions for disptach\nimport { useAppSelector, useAppDispatch } from '../../hooks/reduxHooks';\n\n//Import AuthSlice\nimport {\n selectAuth,\n} from '../auth/authSlice';\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: DRAWER_WIDTH,\n width: `calc(100% - ${DRAWER_WIDTH}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n toolbar: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n title: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n menuButton: {\n marginRight: 36,\n },\n hide: {\n display: \"none\",\n },\n imageIcon: {\n height: \"100%\",\n },\n iconRoot: {\n textAlign: \"center\",\n },\n })\n);\n\n// define interface to represent component props\ninterface Props {\n open: boolean;\n handleMenuOpen: () => void;\n handleMetaMaskConnect: () => void;\n handleRabetConnect: () => void;\n handleDisconnect: () => void;\n toggleTheme: () => void;\n useDefaultTheme: boolean;\n}\n\n\nconst Header: FC = ({\n open,\n handleMenuOpen,\n handleMetaMaskConnect,\n handleRabetConnect,\n handleDisconnect,\n toggleTheme,\n useDefaultTheme,\n}): ReactElement => {\n const classes = useStyles();\n const history = useHistory();\n const authState = useAppSelector(selectAuth);\n const dispatch = useAppDispatch();\n const isLoggedIn = authState.isLoggedIn;\n let error:boolean = false;\n\n\n return (\n <>\n \n \n \n
\n \n \n \n \n {APP_TITLE}\n \n
\n \n {useDefaultTheme ? (\n \n \n \n ) : (\n \n \n \n )}\n \n \n \n \n {!isLoggedIn && (\n \n \n \n \n \n )}\n {!isLoggedIn && (\n \n \n \n \n \n )}\n {isLoggedIn && (\n \n \n \n )}\n

\n {isLoggedIn ? \"🟢\" : error ? \"🔴\" : \"🟠\"}\n

\n
\n \n \n );\n};\n\nexport default Header;\n","import React, { FC, ReactElement } from \"react\";\nimport clsx from \"clsx\";\nimport {\n ListItem,\n ListItemText,\n ListItemIcon,\n Icon,\n Tooltip,\n IconButton,\n} from \"@material-ui/core\";\nimport DefaultIcon from \"@material-ui/icons/FileCopy\";\nimport { makeStyles, Theme, createStyles } from \"@material-ui/core/styles\";\nimport { NavLink, useLocation } from \"react-router-dom\";\n\n// models\nimport RouteItem from \"../../config/RouteItem.model\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n selected: {\n transition: \"box-shadow\",\n transitionDuration: \"1s\",\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`\n },\n nested: {\n marginLeft: theme.spacing(2),\n },\n listItemDisabled: {\n cursor: \"not-allowed\",\n },\n })\n);\n\n// functional component\nconst MenuItem: FC = (route: RouteItem): ReactElement => {\n const classes = useStyles();\n const location: any = useLocation();\n\n const handleNavigate = (\n e: React.MouseEvent\n ): void => {\n if (!route.enabled) e.preventDefault();\n };\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default MenuItem;\n","import p5 from \"p5\";\r\nimport deepEqual from \"deep-equal\";\r\n\r\nimport React, { createRef, FC, memo, useEffect, useState } from \"react\";\r\n\r\nexport interface SketchProps {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Sketch {\r\n (instance: P5Instance): void;\r\n}\r\n\r\nexport interface P5WrapperProps extends SketchProps {\r\n sketch: Sketch;\r\n}\r\n\r\nexport interface P5Instance extends p5 {\r\n updateWithProps?: (props: SketchProps) => void;\r\n}\r\n\r\nexport function createCanvas(sketch: Sketch, container: HTMLDivElement) {\r\n return new p5(sketch, container) as P5Instance;\r\n}\r\n\r\nexport const ReactP5WrapperComponent: FC = ({\r\n sketch,\r\n children,\r\n ...props\r\n}) => {\r\n const wrapper = createRef();\r\n const [instance, setInstance] = useState();\r\n\r\n useEffect(() => {\r\n if (wrapper.current === null) return;\r\n instance?.remove();\r\n const canvas = createCanvas(sketch, wrapper.current);\r\n setInstance(canvas);\r\n }, [sketch, wrapper.current]);\r\n\r\n useEffect(() => {\r\n instance?.updateWithProps?.(props);\r\n }, [props]);\r\n\r\n return
{children}
;\r\n};\r\n\r\n","\r\n//** Branch Class */\r\n//** This method will be the class for building branches */\r\nimport { Vector } from \"p5\";\r\nimport P5Sketch from \"../../ui/p5Sketch\";\r\nimport {P5Instance} from \"../../ui/reactP5WrapperComponent\";\r\nimport * as tModels from \"./treeModels\";\r\n\r\nexport module tree{\r\n//This method is used to draw branches on the tree\r\nexport class Branch {\r\n //The vector type is a xy point\r\n begin: Vector;\r\n end: Vector;\r\n p5I: P5Instance;\r\n isFinished?: boolean;\r\n girth?: number;\r\n color?: number;\r\n jitterValue: tModels.JitterModel;\r\n constructor(start: Vector, end: Vector, p: P5Instance) {\r\n this.begin = start;\r\n this.end = end;\r\n this.p5I = p;\r\n this.jitterValue = { x: this.p5I.random(-1, 1), y: this.p5I.random(-1, 1) };\r\n }\r\n\r\n //This draws the trunk\r\n draw(colorValue: number = 255, branchGirth: number = 1) {\r\n this.color = colorValue;\r\n this.girth = branchGirth;\r\n //set the color of tree\r\n this.p5I.stroke(colorValue);\r\n //drawline\r\n this.p5I.line(this.begin.x, this.begin.y, this.end.x, this.end.y);\r\n }\r\n\r\n createBranch(angle: number | string, placment: tModels.BranchPlacment) {\r\n //We now want to create a dirctional vetor by subtracting the beginging from end\r\n let direction = Vector.sub(this.end, this.begin);\r\n //Now that we have the start point lets rotate it\r\n direction.rotate(Number(angle));\r\n direction.mult(0.67);\r\n let rightEnd = Vector.add(this.end, direction);\r\n //Now we can draw the new right branch\r\n let newBranch = new Branch(this.end, rightEnd, this.p5I);\r\n return newBranch;\r\n }\r\n //this method will act like draw but use a grey color value and add shading outside\r\n //or inside of the branch\r\n addShading() {}\r\n\r\n //This method will take a pattern and create textured bark for the tree\r\n addBark() {}\r\n createRightBranch() {\r\n //We now want to create a dirctional vetor by subtracting the beginging from end\r\n let direction = Vector.sub(this.end, this.begin);\r\n //Now that we have the start point lets rotate it\r\n direction.rotate(Math.PI / 4);\r\n direction.mult(0.67);\r\n let rightEnd = Vector.add(this.end, direction);\r\n //Now we can draw the new right branch\r\n let rightBranch = new Branch(this.end, rightEnd, this.p5I);\r\n return rightBranch;\r\n }\r\n createLeftBranch() {\r\n //We now want to create a dirctional vetor by subtracting the beginging from end\r\n let direction = Vector.sub(this.end, this.begin);\r\n //Now that we have the start point lets rotate it\r\n direction.rotate(-(Math.PI / 4));\r\n direction.mult(0.67);\r\n let leftEnd = Vector.add(this.end, direction);\r\n //Now we can draw the new right branch\r\n let leftBranch = new Branch(this.end, leftEnd, this.p5I);\r\n return leftBranch;\r\n }\r\n //add jitter\r\n jitter() {\r\n\r\n this.end.x += this.jitterValue.x;\r\n this.end.y += this.jitterValue.y;\r\n }\r\n unjitter() {\r\n this.end.x -= this.jitterValue.x;\r\n this.end.y -= this.jitterValue.y;\r\n }\r\n}\r\n\r\n}\r\n\r\n","//**Partical */\r\n//**This class creates particals */\r\nimport {P5Instance} from \"../../ui/reactP5WrapperComponent\";\r\nimport { Vector } from \"p5\";\r\nimport * as tModels from \"./fireworksModels\";\r\n\r\n//This method is used to draw branches on the tree\r\nexport class ParticleClass{\r\n p5I:P5Instance;\r\n screenLocation:Vector;\r\n isFirework:boolean;//is this a firework or just a falling partical\r\n lifespan:number;//life of firwork before explosion\r\n hue:number; //**Color */\r\n acc:Vector;//Not sure what this is yet\r\n speed:Vector;\r\n//**\r\n// */\r\n// * @param p5I -> p5Js running Instance for sketch\r\n// * @param x -> x Value to create Vector\r\n// * @param y -> y Value to create Vector\r\n//* @param hu -> Color value for Fire work\r\n//* @param firework -> FirworkClass\r\n// */\r\nconstructor(p:P5Instance,x:number, y:number, hu:number, isFirework:boolean) {\r\n this.p5I = p;\r\n this.screenLocation = p.createVector(x, y);\r\n this.isFirework = isFirework;\r\n this.lifespan = 255;\r\n this.hue = hu;\r\n this.acc = p.createVector(0, 0);\r\n //Special firework counter\r\n if (isFirework) {\r\n //By just changing the location to of y we can change the height of firework\r\n this.speed = p.createVector(0, p.random(-11, -6));\r\n }\r\n else {\r\n this.speed = Vector.random2D();\r\n this.speed.mult(p.random(2, 10));\r\n }\r\n}\r\n\r\n applyForce(force:Vector) {\r\n this.acc.add(force);\r\n };\r\n\r\n update() {\r\n if (!this.isFirework) {\r\n this.speed.mult(0.9);\r\n this.lifespan -= 4;\r\n }\r\n\r\n this.speed.add(this.acc);\r\n this.screenLocation.add(this.speed);\r\n this.acc.mult(0);\r\n };\r\n\r\n done() {\r\n if (this.lifespan < 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n show() {\r\n this.p5I.colorMode(this.p5I.HSB);\r\n\r\n if (!this.isFirework) {\r\n this.p5I.strokeWeight(2);\r\n this.p5I.stroke(this.hue, 255, 255, this.lifespan);\r\n\r\n } else {\r\n this.p5I.strokeWeight(5);\r\n this.p5I.stroke(this.hue, 255, 255);\r\n this.p5I.point(this.screenLocation.x, this.screenLocation.y);\r\n //this.p5I.point(this.p5I.random(this.screenLocation.x-50,this.screenLocation.x+50), this.screenLocation.y);\r\n }\r\n\r\n this.p5I.point(this.screenLocation.x, this.screenLocation.y);\r\n };\r\n}\r\n\r\n\r\n","import {P5Instance} from \"../../ui/reactP5WrapperComponent\";\r\nimport { Vector } from \"p5\";\r\n//fwm stans for fireworks module\r\nimport {ParticleClass} from \"./particle\";\r\n//This method is used to draw branches on the tree\r\nexport class FireWorkClass {\r\n hue: number;\r\n firework: ParticleClass;\r\n p5I: P5Instance;\r\n particles: Array = [];\r\n exploded = false;\r\n gravity: Vector;\r\n //**@displayField:number this field should be the screen width */\r\n constructor(\r\n p: P5Instance,\r\n displayField: number,\r\n displayHeight: number,\r\n gravity: Vector\r\n ) {\r\n this.p5I = p;\r\n this.hue = p.random(255);\r\n this.firework = new ParticleClass(\r\n p,\r\n p.random(displayField),\r\n displayHeight,\r\n this.hue,\r\n true\r\n );\r\n this.gravity = gravity;\r\n }\r\n done() {\r\n if (this.exploded && this.particles.length === 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n update() {\r\n if (!this.exploded) {\r\n this.firework.applyForce(this.gravity);\r\n this.firework.update();\r\n\r\n if (this.firework.speed.y >= 0) {\r\n this.exploded = true;\r\n this.explode();\r\n }\r\n }\r\n\r\n for (var i = this.particles.length - 1; i >= 0; i--) {\r\n this.particles[i].applyForce(this.gravity);\r\n this.particles[i].update();\r\n\r\n if (this.particles[i].done()) {\r\n this.particles.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n explode() {\r\n for (var i = 0; i < 100; i++) {\r\n var p = new ParticleClass(\r\n this.p5I,\r\n this.firework.screenLocation.x,\r\n this.firework.screenLocation.y,\r\n this.hue,\r\n false\r\n );\r\n this.particles.push(p);\r\n }\r\n }\r\n\r\n display() {\r\n if (!this.exploded) {\r\n this.firework.show();\r\n }\r\n\r\n for (var i = 0; i < this.particles.length; i++) {\r\n this.particles[i].show();\r\n }\r\n }\r\n}\r\n\r\n","//This is our Tree sketch\r\nimport { Element, Vector } from \"p5\";\r\nimport {P5Instance} from \"../../ui/reactP5WrapperComponent\";\r\nimport {tree} from \"./branch\";\r\nimport {FireWorkClass} from \"../fireworks/firework\";\r\nimport {ParticleClass} from \"../fireworks/particle\";\r\nimport {explosionPlacment,GravityValue} from \"../fireworks/fireworksModels\";\r\n\r\n\r\nexport function SketchLive (p5I:P5Instance){\r\n\r\n//Fractial tree section\r\nlet treeArray:Array = [];\r\nlet slider:Element;\r\nvar count = 0;\r\nlet leaves = [];\r\n//Fireworks Section\r\nlet fireworks:Array = [];\r\nlet gravity:Vector;\r\n\r\n\r\nif(p5I !== undefined)\r\n{\r\n //set Vars for sketch here this will come from props\r\n let height = 400;\r\n let width = 1200;\r\n //Set the type to the class\r\n let root:tree.Branch;\r\n p5I.setup = () => {\r\n p5I.createCanvas(width, height);\r\n\r\n const TreeSetUp = () =>{\r\n //Each vector point is a screen point (x,y)\r\n //Every line is made up of two vetor points\r\n let startVector = p5I.createVector(width/2,height);\r\n let endVector = p5I.createVector(width/2,height-100);\r\n root = new tree.Branch(startVector,endVector,p5I);\r\n //Add the root of the tree\r\n treeArray[0] = root;\r\n //for now add branches when user presses down\r\n //later add branches for the number od days in a year\r\n //Add leaves when we are making money \r\n const rndNumberofBranches = p5I.random(2, 200);\r\n for (let index = 0; index <= rndNumberofBranches; index++) {\r\n treeArray.push(treeArray[index].createRightBranch());\r\n treeArray.push(treeArray[index].createLeftBranch());\r\n //Check for number of branches in futher swith girth\r\n //size to decided when to add leaves\r\n if(rndNumberofBranches > 275 && rndNumberofBranches > 400 )\r\n {\r\n //set Count for leaves\r\n if(count === 0 && index > 175)\r\n {\r\n count++\r\n }\r\n if(count === 3)\r\n {\r\n //make leaves on every third branch\r\n count = 0;\r\n }\r\n }\r\n }\r\n\r\n}\r\nconst FireWorkSetUp = () =>{\r\n //setup Fireworks Show\r\n p5I.colorMode(p5I.HSB);\r\n gravity = p5I.createVector(0, GravityValue);\r\n p5I.stroke(255);\r\n p5I.strokeWeight(4);\r\n p5I.background(0);\r\n}\r\n\r\n//Setup Fire Works\r\nFireWorkSetUp(); \r\nTreeSetUp ();\r\n//Add tree\r\n //end of setup\r\n }\r\n\r\n p5I.draw = () => {\r\n const drawTree = () => {\r\n //Make background grey\r\n p5I.background(0);\r\n //treeArray[0].draw();\r\n //set the color of tree by passing a value to the draw method\r\n let unjitterCounter: number = 1;\r\n const jitterBugEffect = (itemIndex:number) => {\r\n if (itemIndex < treeArray.length / 2) {\r\n treeArray[itemIndex].jitter();\r\n } else {\r\n unjitterCounter = itemIndex - unjitterCounter;\r\n if (itemIndex > 0) treeArray[itemIndex].unjitter();\r\n unjitterCounter++;\r\n }\r\n };\r\n for (let index = 0; index < treeArray.length; index++) {\r\n treeArray[index].draw();\r\n }\r\n };\r\n\r\n\r\n //Add fire works behind the tree\r\n drawTree();\r\n p5I.colorMode(p5I.RGB);\r\n p5I.background(0, 0, 0, 25);\r\n if (p5I.random(1) < 0.03) {\r\n fireworks.push(new FireWorkClass(p5I,width,height-100,gravity));\r\n}\r\n\r\nfor (var i = fireworks.length - 1; i >= 0; i--) {\r\n fireworks[i].update();\r\n fireworks[i].display();\r\n\r\n if (fireworks[i].done()) {\r\n fireworks.splice(i, 1);\r\n }\r\n}\r\n\r\n}\r\n }\r\n\r\n};\r\n\r\n","import { Vector } from \"p5\";\r\n\r\nexport type explosionPlacment = \"Top\"| \"Mid\" | \"Bottom\";\r\n\r\nexport const GravityValue:number = 0.2;\r\n\r\n","import React, { FC, ReactElement,ReactNode,Component,createRef,useRef ,useState, memo } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport P5 from \"p5\";\nimport { Link } from \"@material-ui/core\";\n//Get api for sketch\nimport {createCanvas,P5Instance,Sketch} from \"./reactP5WrapperComponent\"\nimport {Tree} from \"../p5sketches/trees/treeSketch\";\nimport {ButterFly} from \"../p5sketches/butterfly/butterFly\";\nimport {SketchLive} from \"../p5sketches/trees/sketchLive\";\n\n\n// constants\nimport { Sketch_HEIGHT, Sketch_WIDTH } from \"../../helpers/constants\";\nimport p5 from \"p5\";\n\n\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n background: theme.palette.background.paper,\n minHeight: Sketch_HEIGHT,\n },\n footer: {\n textTransform: \"uppercase\",\n },\n })\n);\n\n\n// define interface to represent component props for sketch\n// loadSketch: is the method that loads the sketch \ninterface Props {\n loadSketch: (p:P5) => void;\n drawbranch: () => void;\n children: ReactNode;\n}\n\n\n// functional component\nconst P5Sketch: FC<{}> = memo((): ReactElement => {\n const classes = useStyles();\n const [isFirstLoaded, setFirstLoad] = React.useState(true);\n //This will load when Sketch changes\n const [currentSketch, setSketch] = React.useState();\n const wrapper = createRef();\n\n\n\n const [instance, setInstance] = useState();\n React.useEffect((): any => {\n //the sketch we want to add but we will pass this with props\n if (wrapper.current === null || SketchLive === undefined ) return;\n if(isFirstLoaded)\n {\n instance?.remove();\n const canvas = createCanvas(SketchLive, wrapper.current);\n setFirstLoad(false);\n setInstance(canvas);\n }\n\n //const t = new myp5()\n }, [instance,wrapper,isFirstLoaded]);\n\n\n\n\n//className={classes.root}\n return (\n
\n
\n );\n});\n\nexport default P5Sketch;\n","import React from 'react';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Card from '@material-ui/core/Card';\nimport Container from '@material-ui/core/Container';\nimport clsx from 'clsx';\nimport CarIcon from '@material-ui/icons/DriveEtaRounded';\n//import GenieIcon from \"../../MairoGenie.svg\";\nimport P5Sketch from \"../ui/p5Sketch\"\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n content: {\n flexGrow: 1,\n height: '100vh',\n overflow: 'auto',\n },\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: 'flex',\n overflow: 'auto',\n flexDirection: 'column',\n },\n fixedHeight: {\n height: 440,\n },\n })\n );\n\nconst StartingPageContent = () => {\n const classes = useStyles();\n const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight);\n return (\n \n

\n \n \n\n \n\n
\n );\n};\n\nexport default StartingPageContent;\n","import React, { FC, ReactElement } from \"react\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n title: {\n textTransform: \"uppercase\",\n },\n })\n);\n\nconst PageTitle: FC<{ title: String }> = ({ title }): ReactElement => {\n const classes = useStyles();\n return (\n \n {title}\n \n );\n};\n\nexport default PageTitle;\n","import React, { FC, ReactElement } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport GetStartedContent from \"../components/home/getStartedContent\"\n\nimport HomeContent from \"../components/home/homeContent\"\n\n// components\nimport PageTitle from \"../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, PAGE_TITLE_HOME } from \"../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst Home: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n \n {PAGE_TITLE_HOME} | {APP_TITLE}\n \n \n
\n \n \n
\n \n\n \n );\n};\n\nexport default Home;\n","import React, { FC, ReactElement } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport {Counter} from \"../components/counter/counter\"\n// components\nimport PageTitle from \"../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, PAGE_TITLE_DASHBOARD } from '../helpers/constants';\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst Dashboard: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n {} | {APP_TITLE}\n \n
\n \n\n
\n \n )\n}\n\nexport default Dashboard;","import { PlaidAccountInfo } from \"../providers/plaidModels\";\r\nexport interface BankAccount {\r\n userID:string\r\n bankId: String\r\n bankName: String\r\n accountId: String\r\n mask: String\r\n name: String\r\n achAccountNumber: String\r\n achAccountID: String\r\n routing: String\r\n wire: String\r\n}\r\nexport const BankAccountProviders= [\"Plaid\" , \"Stellar\" , \"RIO\"]\r\nexport type BankAccountState = {\r\n isLoaded: boolean;\r\n provider: string;\r\n providerToken:string\r\n bankInfo?: PlaidAccountInfo;\r\n};\r\n","import { createAsyncThunk, createSlice, PayloadAction, ThunkDispatch } from '@reduxjs/toolkit';\r\nimport { uiActions } from \"../../components/ui/uiSlice\";\r\nimport {\r\n BankAccountState,\r\n BankAccountProviders,\r\n} from \"./wallets/accountModels\";\r\n\r\n\r\nimport { RootState, AppThunk } from \"../../appStore/store\";\r\n\r\nimport { PlaidAccountInfo } from \"./providers/plaidModels\";\r\n\r\n\r\n//Plaid provider\r\n\r\n\r\nconst initialBankAccountState: BankAccountState = {\r\n isLoaded: false,\r\n provider: BankAccountProviders[0],\r\n providerToken:\"\",\r\n};\r\n\r\n//This is used for the Plaid provider to get create a link token for the user\r\n//It takes the userId that is used to save the plaidToken and BankInfo after vaildation\r\nexport const GetPlaidLinkToken = createAsyncThunk(\r\n \"api/user/accounts/bank/plaid/getlinktoken\",\r\n async (userID: string, thunkAPI) => {\r\n //set initstate for respn\r\n let response:string ='';\r\n console.log(\"Getting Plaid token\");\r\n thunkAPI.dispatch(\r\n uiActions.showToast({\r\n status: \"loading\",\r\n message: \"Getting Plaid token\",\r\n })\r\n );\r\n async function createLinkToken() {\r\n let urlPath: string = `http://localhost:2709/create-link-token?userid=${userID}`;\r\n let resp = await fetch(urlPath);\r\n const token = await resp.json();\r\n console.log(token);\r\n return token;\r\n }\r\n // The value we return becomes the `fulfilled` action payload\r\n //So here we need to do other Login Task\r\n\r\n try {\r\n thunkAPI.dispatch(uiActions.updateToastMessage(\"Got the Plaid token!\"));\r\n thunkAPI.dispatch(uiActions.hideToast());\r\n //Dispach Login\r\n response = await createLinkToken(); \r\n //response = { };\r\n } catch {\r\n //Disptach error message\r\n }\r\n\r\n return response;\r\n }\r\n);\r\nexport const PlaidTokenExchange = createAsyncThunk(\r\n \"api/user/accounts/bank/plaid/token-exchange\",\r\n async (publicToken: string, thunkAPI) => {\r\n //set initstate for respn\r\n let response: string = \"\";\r\n console.log(\"Getting Plaid token\");\r\n thunkAPI.dispatch(\r\n uiActions.showToast({\r\n status: \"loading\",\r\n message: \"Getting Plaid token\",\r\n })\r\n );\r\n async function tokenExchange() {\r\n let urlPath: string = `http://localhost:2709/token-exchange?publictoken=${publicToken}`;\r\n let resp = await fetch(urlPath);\r\n const token = await resp.json();\r\n console.log(token);\r\n return token;\r\n }\r\n // The value we return becomes the `fulfilled` action payload\r\n //So here we need to do other Login Task\r\n\r\n try {\r\n thunkAPI.dispatch(uiActions.updateToastMessage(\"Exchange the Plaid token!\"));\r\n thunkAPI.dispatch(uiActions.hideToast());\r\n //Dispach Login\r\n response = await tokenExchange();\r\n //response = { };\r\n } catch {\r\n //Disptach error message\r\n }\r\n\r\n return response;\r\n }\r\n);\r\n\r\nexport const GetBankAccountInfo = createAsyncThunk(\r\n \"api/user/accounts/bank/plaid\",\r\n async (usePlaid:boolean, thunkAPI) => {\r\n //set initstate for respn\r\n let response: PlaidAccountInfo = {\r\n usePlaid: usePlaid,\r\n };\r\n\r\n thunkAPI.dispatch(\r\n uiActions.showToast({\r\n status: \"loading\",\r\n message: \"Trying to log you in.\",\r\n })\r\n );\r\n \r\n // The value we return becomes the `fulfilled` action payload\r\n //So here we need to do other Login Task\r\n\r\n try {\r\n thunkAPI.dispatch(uiActions.updateToastMessage(\"Great You made it!\"));\r\n thunkAPI.dispatch(uiActions.hideToast());\r\n //Dispach Login\r\n //response = { };\r\n } catch {\r\n //Disptach error message\r\n }\r\n\r\n return response;\r\n }\r\n);\r\n\r\nconst bankAccountSlice = createSlice({\r\n name: \"ui\",\r\n initialState: initialBankAccountState,\r\n reducers: {},\r\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\r\n // including actions generated by createAsyncThunk or in other slices.\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(GetBankAccountInfo.pending, (state) => {\r\n state.isLoaded = false;\r\n })\r\n .addCase(GetBankAccountInfo.fulfilled, (state, action) => {\r\n state.isLoaded = true;\r\n \r\n //load bankAccount into state from payload\r\n })\r\n .addCase(GetPlaidLinkToken.pending, (state) => {\r\n state.isLoaded = false;\r\n })\r\n .addCase(GetPlaidLinkToken.fulfilled, (state, action) => {\r\n state.isLoaded = true;\r\n state.providerToken = action.payload;\r\n //load bankAccount into state from payload\r\n });\r\n },\r\n});\r\n\r\n//export State interface\r\nexport const selectBankAccount = (state: RootState) => state.userBankAccounts;\r\n\r\nexport const bankActions = bankAccountSlice.actions;\r\n\r\nexport default bankAccountSlice.reducer;\r\n","import React from 'react';\nimport { useState, useRef, useEffect } from \"react\"; \nimport { useHistory } from 'react-router-dom';\nimport { useAppSelector, useAppDispatch } from \"../../hooks/reduxHooks\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Button from '@material-ui/core/Button';\nimport { PAGE_WIDTH } from \"../../helpers/constants\";\n\nimport Plaid from \"plaid\";\n\nimport {\n BankAccountState,\n BankAccountProviders,\n} from \"./wallets/accountModels\";\n\nimport {\n GetBankAccountInfo,\n GetPlaidLinkToken,\n bankActions,\n selectBankAccount,\n} from \"./bankAccountSlice\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(4),\n width: PAGE_WIDTH,\n maxQidth: `25rem`,\n borderRadius: `6px`,\n // backgroundColor: theme.palette.secondary.main,\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\n padding: theme.spacing(1), \n textAlign: `left`,\n },\n })\n);\n\nconst BankAccountCard = () => {\n const classes = useStyles();\n const history = useHistory();\n const bankAccountState = useAppSelector(selectBankAccount);\n const dispatch = useAppDispatch();\n const Title = \"Mangage Bank Accounts\";\n useEffect(() => {\n //Ok\n if (!bankAccountState.isLoaded && bankAccountState.providerToken)\n {\n //Happy days are here again\n alert(bankAccountState.providerToken);\n }\n if (bankAccountState.isLoaded && bankAccountState.bankInfo) {\n //Convert expiredIn to number before passing to Context Handler\n //Get User Info State for Auth Slice\n // console.log(`Welcome back ${data.email} your id is ${data.localId}`);\n //return user to Home\n history.replace(\"/\");\n //}// else if (!isAuthLoading && !error && reqIdentifer === apiSignUPMethodName) {\n // console.log(`Glad you joined with ${data.email} `);\n //return user to Home\n // history.replace('/');\n } else if (!bankAccountState.isLoaded) {\n //tell user what to do with something cool\n }\n\n //Login with MetaMask if already connected\n\n }, [history, bankAccountState]);\n \n const addbankAccountHandler = () =>{\n if (bankAccountState.provider === BankAccountProviders[0]) {\n dispatch(GetPlaidLinkToken(\"1\"));\n }\n //history.replace('/');\n };\n return (\n \n \n \n \n\n \n \n );\n};\n\nexport default BankAccountCard;\n","import React, { FC, ReactElement } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport BankAccountCard from \"../../components/userAccounts/BankAccountCard\"\n// components\nimport PageTitle from \"../../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, SUBPAGE_TITLE_BANK } from \"../../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst BankPage: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n \n {SUBPAGE_TITLE_BANK} | {APP_TITLE}\n \n \n
\n \n
\n \n \n );\n};\n\nexport default BankPage;\n","import { InjectedConnector } from \"@web3-react/injected-connector\";\r\nimport { NetworkConnector } from \"@web3-react/network-connector\";\r\n\r\n//add More Connectors here when ready\r\n//import { WalletConnectConnector } from \"@web3-react/walletconnect-connector\";\r\n//import { WalletLinkConnector } from \"@web3-react/walletlink-connector\";\r\n//import { LedgerConnector } from \"@web3-react/ledger-connector\";\r\n//import { PortisConnector } from \"@web3-react/portis-connector\";\r\n//import { TorusConnector } from \"@web3-react/torus-connector\";\r\nconst POLLING_INTERVAL = 12000;\r\nconst RPC_URLS: { [chainId: number]: string } = {\r\n 1: process.env.RPC_URL_1 as string,\r\n 4: process.env.RPC_URL_4 as string,\r\n};\r\n\r\n//use this to connect to test main and skylynx private network\r\nexport const injected = new InjectedConnector({\r\n supportedChainIds: [1, 3, 4, 5, 15, 42, 1337, 5577],\r\n});\r\n\r\n// export const network = new NetworkConnector({\r\n // urls: { 1: RPC_URLS[1], 4: RPC_URLS[4] },\r\n// defaultChainId: 1,\r\n//});\r\n\r\n//export const walletconnect = new WalletConnectConnector({\r\n // rpc: { 1: RPC_URLS[1] },\r\n// qrcode: true,\r\n// pollingInterval: POLLING_INTERVAL,\r\n//});\r\n\r\n//export const walletlink = new WalletLinkConnector({\r\n// url: RPC_URLS[1],\r\n// appName: \"web3-react example\",\r\n// supportedChainIds: [1, 3, 4, 5, 42, 10, 137, 69, 420, 80001],\r\n//});\r\n\r\n//export const ledger = new LedgerConnector({\r\n // chainId: 1,\r\n// url: RPC_URLS[1],\r\n // pollingInterval: POLLING_INTERVAL,\r\n//});\r\n\r\n//export const trezor = new TrezorConnector({\r\n// chainId: 1,\r\n// url: RPC_URLS[1],\r\n// pollingInterval: POLLING_INTERVAL,\r\n// manifestEmail: \"dummy@abc.xyz\",\r\n// manifestAppUrl: \"http://localhost:1234\",\r\n//});\r\n\r\n\r\n///export const magic = new MagicConnector({\r\n// apiKey: process.env.MAGIC_API_KEY as string,\r\n// chainId: 4,\r\n// email: \"hello@example.org\",\r\n//});\r\n\r\n//export const portis = new PortisConnector({\r\n// dAppId: process.env.PORTIS_DAPP_ID as string,\r\n// networks: [1, 100],\r\n//});\r\n\r\n//export const torus = new TorusConnector({ chainId: 1 });\r\n","import React, { FC, ReactElement } from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\r\nimport BalanceIcon from \"@material-ui/icons/AccountBalanceOutlined\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport {\r\n useWeb3React,\r\n UnsupportedChainIdError,\r\n} from \"@web3-react/core\";\r\nimport {\r\n NoEthereumProviderError,\r\n UserRejectedRequestError as UserRejectedRequestErrorInjected,\r\n} from \"@web3-react/injected-connector\";\r\nimport { formatEther } from \"@ethersproject/units\";\r\n\r\n\r\n const LoadBalance = async () =>{\r\n\r\n }\r\n const WalletBalance: FC<{}> = (): ReactElement => {\r\n const { account, library, chainId } = useWeb3React();\r\n\r\n const [balance, setBalance] = React.useState();\r\n React.useEffect((): any => {\r\n if (!!account && !!library) {\r\n let stale = false;\r\n const getWalletBalance = () => {\r\n library\r\n .getBalance(account)\r\n .then((balance: any) => {\r\n if (!stale) {\r\n setBalance(balance);\r\n }\r\n })\r\n .catch(() => {\r\n if (!stale) {\r\n setBalance(null);\r\n }\r\n });\r\n };\r\n getWalletBalance();\r\n return () => {\r\n stale = true;\r\n setBalance(undefined);\r\n };\r\n }\r\n }, [account, library, chainId]); // ensures refresh if referential identity of library doesn't change across chainIds\r\n\r\n return (\r\n <>\r\n \r\n {balance === null\r\n ? \"Error\"\r\n : balance\r\n ? `${formatEther(balance)}`\r\n : \"\"}\r\n \r\n \r\n );\r\n };\r\n\r\n\r\n\r\nexport default WalletBalance;","import React from 'react';\nimport { useHistory } from \"react-router-dom\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Button from \"@material-ui/core/Button\";\nimport { PAGE_WIDTH } from \"../../helpers/constants\";\nimport { useWeb3React } from \"@web3-react/core\";\nimport {\n injected,\n //network,\n} from \"../userAccounts/connectors\";\nimport WalletBalance from \"./wallets/ethWalletBalance\";\nimport AccountName from \"./wallets/ethAccountName\"\nimport BlockNumber from \"./wallets/ethBlockNumber\";\n\n const address = \"Address\";\n let currentETHAccount=\"Connet your MetaMask to see your account address here\";\n //const Network = \"Network\";\n\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(4),\n width: PAGE_WIDTH,\n flexDirection: \"column\",\n maxQidth: `25rem`,\n borderRadius: `6px`,\n // backgroundColor: theme.palette.secondary.main,\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\n padding: theme.spacing(1),\n textAlign: `left`,\n },\n control: {\n marginBottom: `0.5rem`,\n },\n label: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n input: {\n flex: 2,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n action: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n content: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst ETHWalletCard = () => {\n const classes = useStyles();\n const history = useHistory();\n const web3React = useWeb3React();\n let Title = \"Metamask Account:\";\n//Now get \n\nconst {\n connector,\n chainId,\n account,\n activate,\n deactivate,\n active,\n error,\n library,\n} = web3React;\n\n// handle logic to recognize the connector currently being activated\nconst [activatingConnector, setActivatingConnector] = React.useState();\nReact.useEffect(() => {\n if (activatingConnector && activatingConnector === connector) {\n setActivatingConnector(undefined);\n }\n if (error) {\n //Dispatch Show error\n }\n}, [activatingConnector, connector, error, chainId, account]);\n // if (account) {\n // Title = account ? `${Title} ${account.toString()}` : currentETHAccount;\n // }\n //this method turns account access on and off for the user\n const toggelMetaMaskAccountHandler = () => {\n setActivatingConnector(injected);\n activate(injected);\n //Dispatch Auth Login Request\n //currentETHAccount = account ? account.toString() : \"Error Connecting\";\n };\n return (\n \n \n \n \n \n \n\n \n \n \n );\n};\n\nexport default ETHWalletCard;\n","import React, { FC, ReactElement } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport ETHWalletCard from \"../../components/userAccounts/ETHWalletCard\";\n// components\nimport PageTitle from \"../../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, SUBPAGE_TITLE_ETH } from \"../../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst WalletPage: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n \n {SUBPAGE_TITLE_ETH} | {APP_TITLE}\n \n \n
\n \n \n
\n \n );\n};\n\nexport default WalletPage;\n","import { useRef, useContext,useEffect} from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\n\n//Use Redux hooks to get to see user is logged in and get actions for disptach\nimport { useAppSelector, useAppDispatch } from '../../hooks/reduxHooks';\n//Import AuthSlice\nimport {\n selectAuth\n} from '../auth/authSlice';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: `3rem auto`,\n width: `95%`,\n maxQidth: `25rem`,\n borderRadius: `6px`,\n // backgroundColor: theme.palette.secondary.main,\n //boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\n padding: `1rem`,\n textAlign: `left`,\n },\n control: {\n marginBottom: `0.5rem`,\n },\n label: {\n display: `block`,\n color: theme.palette.text.secondary,\n fontWeight: `bold`,\n marginBottom: '0.5rem',\n },\n input: {\n borderRadius: `4px`,\n width: `100%`,\n textAlign: `left`,\n padding: theme.spacing(2),\n },\n actions: {\n marginTop: `1.5rem`,\n display: `flex`,\n flexDirection: `column`,\n alignItems: `center`,\n },\n toggle: {\n marginTop: `1rem`,\n backgroundColor: `transparent`,\n color: theme.palette.primary.contrastText,\n border: `none`,\n padding:theme.spacing(1),\n },\n })\n);\nconst ProfileForm: React.FC = (props) => {\n //GetAuth Context\n const authState = useAppSelector(selectAuth);\n const dispatch = useAppDispatch();\n const history = useHistory();\n const classes = useStyles();\n //Firebase Rest Method Names\n const apiUpdatePasswordMethodName = \"update\";\n const passwordInputRef = useRef(null);\n \n useEffect(() => {\n if (!authState.isAuthLoading && !authState.isLoggedIn) {\n // let user know the process succeeded by\n //return user to Home\n history.replace('/');\n\n }else if (!authState.isAuthLoading )\n {\n //TODO add error module for now just use alert\n // show custom error form\n }\n }, [authState, history]);\n\n const submitHandler = (event: React.FormEvent) => {\n event.preventDefault();\n let enteredPassword =\"\";\n if(passwordInputRef.current && passwordInputRef.current.value)\n {\n enteredPassword = passwordInputRef.current.value;\n }\n \n console.log(`Your Password has been changed`)\n };\n return (\n
\n \n \n \n \n \n \n \n
\n );\n}\n\nexport default ProfileForm;\n","import React from 'react';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport ProfileForm from './profileForm';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport { PAGE_WIDTH } from \"../../helpers/constants\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: theme.spacing(4),\n width: PAGE_WIDTH,\n maxQidth: `25rem`,\n borderRadius: `6px`,\n // backgroundColor: theme.palette.secondary.main,\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\n padding: theme.spacing(1),\n textAlign: `left`,\n },\n })\n);\nconst UserProfile = () => {\n const classes = useStyles();\n const Title = \"Profile Page\";\n const subTitle =\"Welcome Back!\";\n return (\n \n\n \n \n );\n};\n\nexport default UserProfile;\n","import React, { FC, ReactElement,useContext } from \"react\";\nimport { useHistory } from 'react-router-dom';\nimport { Helmet } from \"react-helmet\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport UserProfile from \"../components/user/userProfile\"\n\nimport Button from '@material-ui/core/Button';\n// components\nimport PageTitle from \"../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, PAGE_TITLE_SETTINGS } from \"../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst Settings: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n\n\n\n return (\n <>\n \n \n {PAGE_TITLE_SETTINGS} | {APP_TITLE}\n \n \n
\n \n
\n \n \n );\n};\n\nexport default Settings;\n","import React from 'react';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\n\nconst LoadingIndicator = () => (\n \n\n);\n\nexport default LoadingIndicator;\n","import React from \"react\";\nimport { useState, useRef, useEffect } from \"react\";\nimport { useAppSelector, useAppDispatch } from \"../../hooks/reduxHooks\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport Typography from \"@material-ui/core/Typography\";\n\nimport Button from \"@material-ui/core/Button\";\nimport { useHistory } from \"react-router-dom\";\nimport { useWeb3React } from \"@web3-react/core\";\nimport {\n injected,\n //network,\n} from \"../userAccounts/connectors\";\n\nimport {\n FB_AuthLoginResponse,\n AuthTokenState,\n LoginProviders,\n} from \"./authModels\";\n\nimport Loading from \"../ui/loadingIndicator\";\n//Import AuthSlice\nimport { LoadFirebaseLoginDataAsync } from \"./authFireBaseAPI\";\nimport {\n authActions,\n selectAuth,\n} from \"./authSlice\";\n\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: `3rem auto`,\n width: `95%`,\n maxQidth: `25rem`,\n borderRadius: `6px`,\n // backgroundColor: theme.palette.secondary.main,\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`,\n padding: `1rem`,\n textAlign: `left`,\n },\n control: {\n marginBottom: `0.5rem`,\n },\n label: {\n display: `block`,\n color: theme.palette.text.secondary,\n fontWeight: `bold`,\n marginBottom: \"0.5rem\",\n },\n input: {\n borderRadius: `4px`,\n width: `100%`,\n textAlign: `left`,\n padding: theme.spacing(2),\n },\n actions: {\n marginTop: `1.5rem`,\n display: `flex`,\n flexDirection: `column`,\n alignItems: `center`,\n },\n toggle: {\n marginTop: `1rem`,\n backgroundColor: `transparent`,\n color: theme.palette.primary.contrastText,\n border: `none`,\n padding: theme.spacing(1),\n },\n })\n);\nconst AuthForm: React.FC = (props) => {\n const classes = useStyles();\n const history = useHistory();\n const authState = useAppSelector(selectAuth);\n const dispatch = useAppDispatch();\n\n const web3React = useWeb3React();\n const { connector, chainId, account, activate, deactivate, active, error } =\n web3React;\n\n const userEmailRef = useRef(null);\n const userSecRef = useRef(null);\n let currentLoginProvider: string = \"SkyLynx\"; \n const apiSignInMethodName = \"signInWithPassword\";\n const apiSignUPMethodName = \"signUp\";\n const [activatingConnector, setActivatingConnector] = React.useState();\n //Handles changes to the HTTP Hook\n useEffect(() => {\n if (!authState.isAuthLoading && authState.isLoggedIn) {\n //Convert expiredIn to number before passing to Context Handler\n //Get User Info State for Auth Slice\n // console.log(`Welcome back ${data.email} your id is ${data.localId}`);\n //return user to Home\n history.replace(\"/\");\n //}// else if (!isAuthLoading && !error && reqIdentifer === apiSignUPMethodName) {\n // console.log(`Glad you joined with ${data.email} `);\n //return user to Home\n // history.replace('/');\n } else if (!authState.isAuthLoading) {\n //TODO add error module for now just use alert\n //alert(error);\n }\n\n //Login with MetaMask if already connected\n\n }, [history, authState, account]);\n\n const metaMaskConnectHandler = (event: React.FormEvent) => {\n setActivatingConnector(injected);\n activate(injected);\n if (account) {\n dispatch(\n authActions.replaceLoginData({\n token: account,\n isLoggedIn: true,\n remainingTime: 5000,\n isAuthLoading: false,\n provider: \"MetaMask\",\n })\n );\n }\n }\n\n const logInSubmitHandler = (event: React.FormEvent) => {\n event.preventDefault();\n let enteredEmail = \"\";\n let enteredPassword = \"\";\n\n //Validation of user input\n if (\n userEmailRef.current &&\n userEmailRef.current.value &&\n userSecRef.current &&\n userSecRef.current.value\n ) {\n enteredEmail = userEmailRef.current.value;\n enteredPassword = userSecRef.current.value;\n }\n\n //Add Login or Sign up\n if (!authState.isLoggedIn) {\n //Here we are logging a user in to the website\n //console.log(`Welcome back your emailaddress is still ${enteredEmail}`);\n //Dispatch LogIn here sendLoginRequest\n dispatch(\n LoadFirebaseLoginDataAsync({\n email: enteredEmail,\n secret: enteredPassword,\n })\n );\n //Examples of dispatching\n // dispatch(\n // logInFirebaseAsync({\n // email: enteredEmail,\n // secret: enteredPassword,\n // })\n // );\n //remove just for test\n // const currentAuthState: AuthTokenState = {\n // token: authState.token,\n // isLoggedIn: true,\n // remainingTime: authState.remainingTime,\n // isAuthLoading: authState.isAuthLoading,\n // hasError: authState.hasError,\n // };\n // dispatch(authActions.setLoginData(currentAuthState));\n } else {\n //Here we are signing a user up to use the site\n //Dispatch Sign Up here\n console.log(`Using SkyLynxs Network`);\n }\n };\n\n const switchAuthModeHandler = () => {\n // setuseMetaMask((prevState) => !prevState);\n if (currentLoginProvider === \"SkyLynx\") {\n currentLoginProvider = \"Rabbit\";\n } else {\n currentLoginProvider = \"SkyLynx\";\n }\n\n };\n\n return (\n \n \n \n {currentLoginProvider === \"SkyLynx\" && (\n \n \n \n \n )}\n {currentLoginProvider === \"SkyLynx\" && (\n \n \n \n \n )}\n \n {!authState.isAuthLoading && (\n \n )}\n {authState.isAuthLoading && }\n \n {currentLoginProvider === \"Stellar\"\n ? \"Login with Rabbit\"\n : \"Connect Stellar Wallet\"}\n \n {authState.isAuthLoading && }\n \n {currentLoginProvider === \"MetaMask\"\n ? \"Login with existing account\"\n : \"Connect Metamask Wallet\"}\n \n {authState.isAuthLoading && }\n \n {currentLoginProvider === \"SkyLynxs SignUp\"\n ? \"Create a SkyLynxs Network Account\"\n : \"Create Account\"}\n \n \n \n \n );\n};\n\nexport default AuthForm;\n","import React, { FC, ReactElement } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\n//import AuthForm from '../components/Auth/AuthForm';\nimport AuthForm from '../components/auth/authForm';\n\nimport clsx from 'clsx';\nimport { APP_TITLE, PAGE_TITLE_AUTH } from '../helpers/constants';\nimport PageTitle from \"../components/ui/pageTitle\";\n\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\nconst AuthPage: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n {} | {APP_TITLE}\n \n
\n \n
\n ;\n )\n};\n\nexport default AuthPage;\n","import React, { FC, ReactElement } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\n\n// components\nimport PageTitle from \"../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, PAGE_TITLE_DASHBOARD } from '../helpers/constants';\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst StellarDash: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n \n {} | {APP_TITLE}\n \n \n
\n \n
\n \n );\n};\n\nexport default StellarDash;","import React, { FC, ReactElement } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport {Counter} from \"../components/counter/counter\"\n// components\nimport PageTitle from \"../components/ui/pageTitle\";\n\n// constants\nimport { APP_TITLE, PAGE_TITLE_DASHBOARD } from '../helpers/constants';\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n })\n);\n\nconst InvestDash: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n \n {} | {APP_TITLE}\n \n \n
\n \n
\n \n );\n};\n\nexport default InvestDash;","// icons\nimport React,{ useContext} from 'react';\nimport HomeIcon from '@material-ui/icons/Home';\nimport LoginIcon from '@material-ui/icons/AddToHomeScreenOutlined';\nimport DashboardIcon from '@material-ui/icons/BarChartOutlined';\nimport SettingsIcon from '@material-ui/icons/SettingsOutlined';\nimport WalletIcon from '@material-ui/icons/AccountBalanceWallet';\nimport BankIcon from '@material-ui/icons/AccountTreeOutlined';\nimport EthIcon from '@material-ui/icons/AccountBoxOutlined';\nimport CompoundIcon from \"@material-ui/icons/MonetizationOnOutlined\";\nimport InvestIcon from \"@material-ui/icons/Money\";\nimport UserIcon from \"@material-ui/icons/VerifiedUserRounded\";\n\n//Authorization\nimport { useAppSelector } from '../hooks/reduxHooks';\n\n// components\nimport Home from '../pages/home';\nimport Dashboard from '../pages/dashboard';\n\nimport BankPage from '../pages/accounts/bankAccount';\nimport WalletPage from '../pages/accounts/walletsAccounts';\nimport Settings from '../pages/settings';\nimport AuthPage from '../pages/authPage';\nimport CompoundPage from \"../pages/stellar\";\nimport InvestPage from \"../pages/invest\";\n\n\n// interface\nimport RouteItem from './RouteItem.model';\nimport {\n selectAuth,\n } from '../components/auth/authSlice';\n// define app routes\nexport const Loadroutes =() => {\n const authState = useAppSelector(selectAuth);\n const isLoggedIn = authState.isLoggedIn;\n let routes: Array = [];\nif(isLoggedIn !== undefined)\n{\nroutes = [\n {\n key: \"router-home\",\n title: \"Home\",\n tooltip: \"Home\",\n path: \"/\",\n enabled: true,\n component: Home,\n icon: WalletIcon,\n appendDivider: true,\n },\n {\n key: \"router-dashboard\",\n title: \"Markets\",\n tooltip: \"Market Dashboard\",\n path: \"/markets\",\n enabled: isLoggedIn,\n component: Dashboard,\n icon: DashboardIcon,\n },\n {\n key: \"router-compound\",\n title: \"Stellar\",\n tooltip: \"Manage Account\",\n path: \"/compound\",\n enabled: isLoggedIn,\n component: CompoundPage,\n icon: CompoundIcon,\n },\n {\n key: \"router-invest\",\n title: \"Invest\",\n tooltip: \"DecentralLand\",\n path: \"/invest\",\n enabled: isLoggedIn,\n component: InvestPage,\n icon: InvestIcon,\n },\n\n {\n key: \"router-act\",\n title: \"Accounts\",\n tooltip: \"Accounts\",\n enabled: isLoggedIn,\n icon: WalletIcon,\n subRoutes: [\n {\n key: \"router-account-bank\",\n title: \"Bank Accounts\",\n tooltip: \"Bank Accounts\",\n path: \"/accounts/bank\",\n enabled: isLoggedIn,\n component: BankPage,\n icon: BankIcon,\n },\n {\n key: \"router-account-eth\",\n title: \"Wallets\",\n tooltip: \"Connect Crypto Wallets Here\",\n path: \"/accounts/wallets\",\n enabled: isLoggedIn,\n component: WalletPage,\n icon: EthIcon,\n },\n ],\n },\n {\n key: \"router-auth\",\n title: \"User\",\n tooltip: \"User Identity\",\n path: \"/auth\",\n enabled: !isLoggedIn,\n component: AuthPage,\n icon: UserIcon,\n },\n {\n key: \"router-settings\",\n title: \"Settings\",\n tooltip: \"Settings\",\n path: \"/settings\",\n enabled: isLoggedIn,\n component: Settings,\n icon: SettingsIcon,\n },\n];\n}\nreturn routes;\n\n\n} ;","import React, { FC, ReactElement, useState } from \"react\";\nimport clsx from 'clsx';\nimport {\n List,\n Divider,\n ListItem,\n ListItemIcon,\n ListItemText,\n Collapse,\n Icon,\n Tooltip,\n IconButton\n} from \"@material-ui/core\";\nimport { makeStyles, Theme, createStyles } from \"@material-ui/core/styles\";\nimport DefaultIcon from \"@material-ui/icons/AccountBox\";\nimport ExpandLess from \"@material-ui/icons/ExpandLess\";\nimport ExpandMore from \"@material-ui/icons/ExpandMore\";\nimport { useLocation } from 'react-router-dom';\n\n// components\nimport MenuItem from \"./menuItem\";\n// app routes\nimport { Loadroutes } from \"../../config\";\n// interfaces\nimport RouteItem from \"../../config/RouteItem.model\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n nested: {\n marginLeft: theme.spacing(2),\n },\n selected: {\n transition: \"box-shadow\",\n transitionDuration: \"1s\",\n boxShadow: `0 0 3px ${theme.palette.primary.main}, 0 0 9px ${theme.palette.primary.main}, 0 0 11px ${theme.palette.primary.main}, 0 0 30px ${theme.palette.primary.main}`\n },\n })\n);\n\n// functional component\nconst Menu: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n const location: any = useLocation();\n let routes = Loadroutes();\n const handleClick = (): void => {\n setOpen(!open);\n };\n\n return (\n \n {routes.map((route: RouteItem) => (\n <>\n {route.subRoutes ? (\n <>\n \n \n item.path === location.pathname)\n })}\n size='small'\n >\n \n \n \n \n {open ? (\n \n \n \n ) : (\n \n \n \n )}\n \n \n \n {route.subRoutes.map((sRoute: RouteItem) => (\n \n ))}\n \n \n \n ) : (\n \n )}\n {route.appendDivider && }\n \n ))}\n \n );\n};\n\nexport default Menu;\n","import React, { FC, ReactElement } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { IconButton, Drawer } from \"@material-ui/core\";\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\n\n// components\nimport AppMenu from \"./appMenu\";\n\n// constants\nimport { DRAWER_WIDTH } from \"../../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n drawer: {\n width: DRAWER_WIDTH,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n },\n drawerOpen: {\n width: DRAWER_WIDTH,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerClose: {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9) + 1,\n },\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n ...theme.mixins.toolbar,\n background: `linear-gradient(270deg, ${theme.palette.primary.main} 0%, ${theme.palette.background.default} 70%);`,\n },\n })\n);\n\n// define interface to represent component props\ninterface Props {\n open: boolean;\n handleMenuClose: () => void;\n}\n\nconst Navigation: FC = ({ open, handleMenuClose }): ReactElement => {\n const classes = useStyles();\n return (\n <>\n \n
\n \n \n \n
\n \n \n \n );\n};\n\nexport default Navigation;\n","import React, { FC, ReactElement } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport { Link } from \"@material-ui/core\";\n\n// constants\nimport { FOOTER_TEXT, FOOTER_HEIGHT } from \"../../helpers/constants\";\n\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n background: theme.palette.background.paper,\n minHeight: FOOTER_HEIGHT,\n },\n footer: {\n textTransform: \"uppercase\",\n },\n })\n);\n\n// functional component\nconst Footer: FC<{}> = (): ReactElement => {\n const classes = useStyles();\n return (\n
\n \n {FOOTER_TEXT}\n \n
\n );\n};\n\nexport default Footer;\n","import React, { FC, ReactNode, useReducer } from \"react\";\nimport clsx from \"clsx\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport { CssBaseline } from \"@material-ui/core\";\nimport { useHistory } from \"react-router-dom\";\n// components\nimport Header from \"./header\";\nimport Navigation from \"./navigation\";\nimport Footer from \"./footer\";\n//Move out to button\nimport {useWeb3React } from \"@web3-react/core\";\n//Models\nimport { MetaMask_ConnectResponse } from \"../../components/auth/authModels\";\nimport {\n injected,\n //network,\n} from \"../userAccounts/connectors\";\nimport {\n authActions,\n selectAuth,\n} from \"../../components/auth/authSlice\";\n// constants\nimport { DRAWER_WIDTH, FOOTER_HEIGHT } from \"../../helpers/constants\";\nimport { useAppDispatch } from \"../../hooks/reduxHooks\";\n// define css-in-js\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n minHeight: `calc(100vh - ${FOOTER_HEIGHT}px)`,\n background: theme.palette.background.paper,\n marginLeft: theme.spacing(7) + 1,\n [theme.breakpoints.up(\"sm\")]: {\n marginLeft: theme.spacing(9) + 1,\n },\n },\n toolbar: {\n ...theme.mixins.toolbar,\n },\n contentShift: {\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: DRAWER_WIDTH,\n },\n })\n);\n\n// define interface to represent component props\ninterface Props {\n\n toggleTheme: () => void;\n useDefaultTheme: boolean;\n children: ReactNode;\n}\n\n// functional component\nconst Layout: FC = ({\n toggleTheme,\n useDefaultTheme,\n children,\n}) => {\n const classes = useStyles();\n const [open, toggle] = useReducer((open) => !open, true);\n const history = useHistory();\n //setup web3 Hooks\n const web3React = useWeb3React();\n const dispatch = useAppDispatch();\n //Setup Web3 Connect button to Log users into system\n const {\n connector,\n chainId,\n account,\n activate,\n deactivate,\n active,\n error,\n library,\n} = web3React;\n//useEffect for web3 Ethers state set up\nconst [activatingConnector, setActivatingConnector] = React.useState();\nReact.useEffect(() => {\n if (activatingConnector && activatingConnector === connector) {\n setActivatingConnector(undefined);\n }\n if (error) {\n //Dispatch Show error\n }\n}, [activatingConnector, connector, error, chainId, account]);\n\n //add a slice of web3 Connect and disconnect\n const connectMetaMaskHandler = async () => {\n\n try {\n setActivatingConnector(injected);\n await activate(injected);\n\n const args:MetaMask_ConnectResponse = { addressKey:\"***fukyou***\"};\n dispatch(authActions.setMetaMaskLoginData(args));\n //history.replace(\"/\");\n } catch (ex) {\n console.log(ex);\n }\n\n };\n\n const connectRabetHandler = async () => {\n try {\n setActivatingConnector(injected);\n await activate(injected);\n\n const args: MetaMask_ConnectResponse = { addressKey: \"***fukyou***\" };\n dispatch(authActions.setMetaMaskLoginData(args));\n //history.replace(\"/\");\n } catch (ex) {\n console.log(ex);\n }\n };\n\n const logoutHandler = () => {\n dispatch(authActions.logout());\n deactivate();\n history.replace(\"/\");\n };\n\n\n return (\n
\n \n \n \n \n
\n {children}\n \n
\n
\n
\n
\n );\n};\n\nexport default Layout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {createMuiTheme,withStyles,Theme,ThemeOptions} from \"@material-ui/core/styles\";\nimport {blue,lightBlue,lightGreen,teal,pink,yellow,deepPurple} from \"@material-ui/core/colors\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport cryoRIOLightPrimaryColor from \"./cryoRIOLightPrimary\";\n\n\n\n\nconst styles = {\n root: {\n display: \"flex\",\n },\n};\n\n//Would like to use this in both themes figure out how later\n\n// define light theme colors\nexport const lightTheme: Theme = createMuiTheme({\n palette: {\n type: \"light\",\n //dark blue\n primary: {\n //main: blue[900],\n main: \"#1D5E72\",\n },\n //light blue\n secondary: {\n //main: lightBlue[500],\n main: \"#94942F\",\n },\n info: {\n //main: teal[400],\n main: \"#FFFFD6\",\n },\n warning: {\n // main: yellow[900],\n main: pink[400],\n },\n },\n typography: {\n fontFamily: \"Showcard Gothic\",\n fontSize: 18,\n fontWeightMedium: 500,\n body1: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n },\n body2: {\n fontFamily: \"Roboto Mono\",\n fontWeight: 500,\n },\n subtitle1: {\n fontSize: 35,\n },\n button: {\n fontStyle: \"italic\",\n fontFamily: \"Roboto Mono\",\n },\n },\n});\n\n// define dark theme colors\nexport const darkTheme: Theme = createMuiTheme({\n palette: {\n type: \"dark\",\n primary: {\n main: deepPurple[500],\n },\n secondary: {\n main: pink[400],\n },\n info: {\n main: pink[700],\n },\n warning: {\n main: yellow[400],\n },\n },\n typography: {\n fontFamily: \"Showcard Gothic\",\n fontSize: 18,\n fontWeightMedium: 500,\n body1: {\n fontWeight: 500,\n },\n subtitle1: {\n fontSize: 35,\n },\n button: {\n fontStyle: \"italic\",\n },\n },\n});\n","import React, { Fragment, ReactElement,useEffect, useReducer, FC } from \"react\";\nimport { useAppSelector, useAppDispatch } from \"./hooks/reduxHooks\";\n\nimport {\n createMuiTheme,\n Theme,\n responsiveFontSizes,\n ThemeProvider,\n} from \"@material-ui/core/styles\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\nimport {\n selectUI,\n} from \"./components/ui/uiSlice\";\n\nimport {\n authActions,\n selectAuth,\n} from \"./components/auth/authSlice\";\nimport Toast from \"./components/ui/toast\";\n\n// components\nimport Layout from \"./components/ui/layout\";\n\n// theme\nimport { lightTheme, darkTheme } from \"./theme/appTheme\";\n\n// app routes\nimport { Loadroutes } from \"./config\";\n\n// constants\nimport { APP_TITLE } from \"./helpers/constants\";\nimport { ethers } from \"ethers\";\nimport { Web3ReactProvider, useWeb3React } from \"@web3-react/core\";\n// interfaces\nimport RouteItem from \"./config/RouteItem.model\";\nimport { ToastItem } from \"./components/ui/uiModels\";\n\n\n//define timer for user log in\n// define app context\nconst AppContext = React.createContext(null);\n\n// default component\nconst DefaultComponent: FC<{}> = (): ReactElement => (\n
{`No Component Defined.`}
\n);\n\n//get ether network\nfunction getLibrary(provider: any): ethers.providers.Web3Provider {\n const library = new ethers.providers.Web3Provider(provider);\n \n //Setup Connects and state\n library.detectNetwork();\n library.pollingInterval = 12000;\n return library;\n}\n\nfunction\nApp() {\n const [useDefaultTheme, toggle] = useReducer((theme) => !theme, true);\n //tracks first time load on a machine\n let isInitial = true;\n const uiState = useAppSelector(selectUI);\n const authState = useAppSelector(selectAuth);\n const dispatch = useAppDispatch();\n\n let logoutTimer: NodeJS.Timeout;\n // define custom theme\n let theme: Theme = createMuiTheme(useDefaultTheme ? lightTheme : darkTheme);\n theme = responsiveFontSizes(theme);\n let routes = Loadroutes();\n const createTimer = (remainingTime: number) => {\n return setTimeout(() => dispatch(authActions.logout()), remainingTime);\n };\n\n\n//This controls the auth state of the user\n useEffect(() => {\n // if (isInitial) {\n // isInitial = false;\n // if (authState.isLoggedIn) {\n // logoutTimer = createTimer(authState.remainingTime);\n // }\n // }\n if (authState.isLoggedIn) {\n //Bug with getting remainingTime from storage location\n createTimer(authState.remainingTime);\n }\n\n if (authState.isLoggedIn === false && logoutTimer !== undefined) {\n //Clear logout timer when users logs out\n return clearTimeout(logoutTimer);\n }\n //dispatch(sendCartData(cart));\n }, [uiState, authState, useAppDispatch, isInitial]);\n\n let toastMessageState: ToastItem = {\n status: uiState.notification.status,\n message: uiState.notification.message,\n };\n\n\n return (\n <>\n \n \n \n {APP_TITLE}\n \n \n \n \n \n {uiState.notification &&\n uiState.notification.status !== \"Idel\" && (\n \n )}\n \n {/* for each route config, a react route is created */}\n {routes.map((route: RouteItem) =>\n route.subRoutes ? (\n route.subRoutes.map((item: RouteItem) => (\n \n ))\n ) : (\n \n )\n )}\n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","// A mock function to mimic making an async request for data\n\n\nexport function fetchCount(amount = 1) {\n return new Promise<{ data: number }>((resolve) =>\n setTimeout(() => resolve({ data: amount }), 500)\n );\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState, AppThunk } from '../../appStore/store';\nimport { fetchCount } from './counterAPI';\n\n//move to core Models file and import from there\nexport interface CounterState {\n value: number;\n status: 'idle' | 'loading' | 'failed';\n}\n\nconst initialCounterState: CounterState = {\n value: 0,\n status: 'idle',\n};\n\n// The function below is called a thunk and allows us to perform async logic. It\n// can be dispatched like a regular action: `dispatch(incrementAsync(10))`. This\n// will call the thunk with the `dispatch` function as the first argument. Async\n// code can then be executed and other actions can be dispatched. Thunks are\n// typically used to make async requests.\nexport const incrementAsync = createAsyncThunk(\n 'counter/fetchCount',\n async (amount: number) => {\n const response = await fetchCount(amount);\n // The value we return becomes the `fulfilled` action payload\n \n return response.data;\n }\n);\n\n// We can also write thunks by hand, which may contain both sync and async logic.\n// Here's an example of conditionally dispatching actions based on current state.\nexport const incrementIfOdd = (amount: number): AppThunk => (\n dispatch,\n getState\n) => {\n const currentValue = selectCount(getState());\n if (currentValue % 2 === 1) {\n dispatch(incrementByAmount(amount));\n }\n};\n\nexport const counterSlice = createSlice({\n name: 'counter',\n initialState: initialCounterState ,\n // The `reducers` field lets us define reducers and generate associated actions\n reducers: {\n increment: (state) => {\n // Redux Toolkit allows us to write \"mutating\" logic in reducers. It\n // doesn't actually mutate the state because it uses the Immer library,\n // which detects changes to a \"draft state\" and produces a brand new\n // immutable state based off those changes\n state.value += 1;\n },\n decrement: (state) => {\n state.value -= 1;\n },\n // Use the PayloadAction type to declare the contents of `action.payload`\n incrementByAmount: (state, action: PayloadAction) => {\n state.value += action.payload;\n },\n },\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\n // including actions generated by createAsyncThunk or in other slices.\n extraReducers: (builder) => {\n builder\n .addCase(incrementAsync.pending, (state) => {\n state.status = 'loading';\n })\n .addCase(incrementAsync.fulfilled, (state, action) => {\n state.status = 'idle';\n state.value += action.payload;\n });\n },\n});\n\nexport const { increment, decrement, incrementByAmount } = counterSlice.actions;\n\n// The function below is called a selector and allows us to select a value from\n// the state. Selectors can also be defined inline where they're used instead of\n// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`\nexport const selectCount = (state: RootState) => state.counter.value;\n\n\n\n\n\nexport default counterSlice.reducer;\n","import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';\r\nimport counterReducer from '../components/counter/counterSlice';\r\nimport authReducer from '../components/auth/authSlice';\r\nimport uiReducer from \"../components/ui/uiSlice\";\r\nimport bankAccountReducer from \"../components/userAccounts/bankAccountSlice\";\r\n\r\n\r\n//Here we wire up our different State Reducers from thier Slices\r\nexport const store = configureStore({\r\n reducer: {\r\n counter: counterReducer,\r\n auth: authReducer,\r\n ui: uiReducer,\r\n userBankAccounts: bankAccountReducer\r\n },\r\n});\r\n\r\nexport type AppDispatch = typeof store.dispatch;\r\nexport type RootState = ReturnType;\r\nexport type AppThunk = ThunkAction<\r\n ReturnType,\r\n RootState,\r\n unknown,\r\n Action\r\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","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {Provider} from 'react-redux'\nimport { BrowserRouter } from 'react-router-dom';\nimport App from './app';\nimport {store} from './appStore/store'\nimport reportWebVitals from './reportWebVitals';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n \n \n \n,\n document.getElementById('root')\n);\n\nreportWebVitals();\nserviceWorker.unregister();"],"sourceRoot":""}