{"version":3,"sources":["behavior/userReducer.js","behavior/countriesReducer.js","behavior/currenciesReducer.js","behavior/snackbarReducer.js","behavior/depositReducer.js","behavior/assessmentConfigurationsReducer.js","behavior/rootReducer.js","utils/api.js","components/navigation/IncrementWeeksButtons.js","components/navigation/ReportButton.js","components/navigation/ResetGameButton.js","components/primitives/Amount.js","components/primitives/CurrencyAutocomplete.js","components/primitives/CurrencyTableCell.js","components/primitives/CountryAutocomplete.js","components/navigation/AccountInfo.js","components/navigation/AssessmentInfo.js","components/navigation/Navigation.js","components/Layout.js","components/SnackbarAlert.js","components/events/UserEventDialog.js","components/events/UserEventHandler.js","components/quizzes/UserQuizDialog.js","components/quizzes/UserQuizHandler.js","components/report/UserReportDialog.js","components/report/UserReportHandler.js","components/cards/CollapsibleCard.js","components/cards/currentAccount/OpenAccountDialog.js","components/cards/currentAccount/ToSavingsDialog.js","components/cards/currentAccount/ExchangeDialog.js","components/cards/currentAccount/CurrentAccountCard.js","components/cards/savings/ToCurrentAccountDialog.js","components/cards/savings/SavingsCard.js","components/cards/WeekUpdateCard.js","components/cards/AnalyticsCard.js","components/cards/ExchangeRatesCard.js","components/cards/deposit/OpenDepositSection.js","components/cards/deposit/BasicDepositInfo.js","components/cards/deposit/DetailsPopup.js","components/cards/deposit/DepositInfoCard.js","components/cards/credits/BasicCreditInfo.js","components/cards/credits/OpenCreditSection.js","components/cards/credits/CreditInfoCard.js","components/cards/transactions/TransactionsDialog.js","components/cards/transactions/TransactionsCard.js","components/cards/nonFinancialInvestments/NonFinancialInvestmentDialog.js","components/cards/nonFinancialInvestments/NonFinancialInvestmentsCard.js","components/Game.js","components/Header.js","components/GameStart.js","components/Home.js","index.js","utils/configureStore.js","App.js"],"names":["onUserReceived","userData","type","payload","receiveUserEvent","event","receiveUserQuiz","quiz","changeReportState","show","initialState","sync","loaded","undefined","showReport","showSnackbarMessage","message","variant","resetDepositOptions","rootReducer","combineReducers","user","state","action","countries","currencies","snackbar","depositOptions","assessmentConfigurations","get","then","ip","input","post","options","url","count","startWeek","endWeek","currency","value","depositId","closable","amount","shouldCapitalize","name","duration","percentage","fromCurrency","toCurrency","feedback","id","a","fetch","response","processResponse","data","method","headers","body","JSON","stringify","contentType","startsWith","json","text","useStyles","makeStyles","list","display","buttonContainer","width","iconContainer","listItemText","textAlign","fontSize","progress","color","green","position","left","marginTop","marginLeft","connect","accounts","defaultCurrency","classes","useState","loading","setLoading","negativeBalance","find","isDisabled","List","className","ListItem","ListItemIcon","style","NextWeek","CircularProgress","size","Tooltip","arrow","title","negativeBalanceText","button","disabled","disableGutters","onClick","api","userEvent","userQuiz","setTimeout","ListItemText","primary","bind","TrendingUp","syncUser","confirm","setConfirm","Update","Dialog","disableBackdropClick","disableEscapeKeyDown","maxWidth","open","DialogTitle","DialogContent","dividers","DialogActions","Button","autoFocus","pre","parseFloat","toFixed","getCurrencySymbol","option","marginRight","CurrencyAutocomplete","label","onChange","onBlur","props","styles","Autocomplete","getOptionLabel","code","autoHighlight","_","renderOption","toLowerCase","renderInput","params","TextField","autoComplete","image","verticalAlign","CurrencyTableCell","TableCell","whiteSpace","CountryAutocomplete","country","theme","nested","paddingLeft","spacing","salary","spending","setOpen","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","component","disablePadding","secondary","Amount","backgroundColor","outline","maxHeight","overflow","marginBottom","category","assessmentItem","padding","paddingRight","iconWrapper","minWidth","red","passedAssessmentIds","points","useMemo","result","item","configurations","config","includes","map","i","key","Typography","CheckCircle","Cancel","drawer","breakpoints","up","flexShrink","appBar","zIndex","menuButton","toolbar","mixins","drawerPaper","gameStarted","currentWeek","assessmentEnabled","isReportAvailable","mobileOpen","setMobileOpen","handleDrawerToggle","Divider","CssBaseline","AppBar","Toolbar","IconButton","aria-label","edge","Menu","noWrap","Hidden","smUp","implementation","Drawer","onClose","paper","ModalProps","keepMounted","xsDown","root","content","flexGrow","children","hideSnackbarMessage","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","Alert","severity","media","height","warning","UserEventDialog","spendingText","from","to","Card","CardMedia","CardContent","gutterBottom","description","dialogOpen","setDialogOpen","useEffect","handleClose","useCallback","fontWeight","activeStep","setActiveStep","questions","question","answers","stepsData","setStepsData","helperText","setHelperText","isError","setIsError","validate","correctAnswers","filter","isCorrect","sort","handleNext","length","prevActiveStep","quizId","Stepper","alternativeLabel","Step","StepLabel","FormControl","error","RadioGroup","e","questionId","target","questionsInput","push","answer","FormControlLabel","control","Radio","FormHelperText","dialogTitle","subTitle","lineHeight","feedbackTitle","chart","countrySelect","userCountryId","userReports","setUserReports","countryReports","setCountryReports","selectedCountryId","setCountryId","userReportCategories","countryReportCategories","handleCountryChange","formik","useFormik","initialValues","values","errors","onSubmit","closeDialog","resetForm","fullWidth","handleSubmit","DialogContentText","Grid","container","lg","sm","createOption","select","r","MenuItem","countryId","c","reportCategories","xs","multiline","handleChange","handleBlur","touched","items","tooltip","trigger","formatter","legend","bottom","grid","top","right","containLabel","xAxis","boundaryGap","week","yAxis","axisLabel","series","d","reportNotify","paddingTop","CollapsibleCard","expanded","setExpanded","CardHeader","titleTypographyProps","formControl","availableCurrencies","usedCurrencies","setFieldValue","setFieldTouched","Number","isNaN","accountAmount","formGroup","margin","getAnotherCurrency","account","handleFromValueChange","number","isNan","endsWith","handleFromCurrencyChange","handleToValueChange","handleToCurrencyChange","openAccountDialogOpen","setOpenAccountDialogOpen","toSavingsDialogOpen","setToSavingsDialogOpen","exchangeDialogOpen","setExchangeDialogOpen","Table","TableBody","TableRow","align","CardActions","savings","cashAmount","toCurrentAccountDialogOpen","setToCurrentAccountDialogOpen","currencySelect","setData","selectedId","setId","selectedItem","selectedCurrency","categories","notMerge","transactions","currencyCode","emphasisStyle","itemStyle","barBorderWidth","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","stack","emphasis","exchangeRates","setExchangeRates","TableHead","rate","buy","sell","depositOptionsReceived","setCurrency","optionsToShow","o","depositing","setDepositing","depositOption","deposit","Paper","square","Tabs","centered","indicatorColor","textColor","newCurrency","Tab","Box","index","closablePercentage","Checkbox","checked","BorderLinearProgress","withStyles","lighten","bar","borderRadius","LinearProgress","BasicDepositInfo","balance","durationInMonths","Fragment","accountBalance","isOpen","deposits","hasDeposits","openDetails","setOpenDetails","selectedDeposit","useRef","AlertTitle","current","AccountBalance","BasicCreditInfo","totalAmount","defaultAccountBalance","isEmergency","creditTitle","crediting","setCrediting","parseInt","class","credits","hasCredits","credit","CardMembership","setTransactions","setStartWeek","setEndWeek","handleStartWeekChange","handleEndWeekChange","operationTitle","transactionsDialogOpen","setTransactionsDialogOpen","alert","infoItem","accountValue","price","handleBuy","willBeSoldAfterBuyingInWeeks","possibleIncome","nonFinancialInvestments","setItems","availableItems","setAvailableItems","setSelectedItem","availableInWeeks","handleItemSelect","Game","md","CurrentAccountCard","defaults","locationInfo","showSalarySpendingDropdown","toggleSalarySpendingDropdown","countryCode","salarySpending","customSalary","customSpending","parts","split","Header","s","Switch","userLoaded","receiveCountries","receiveCurrencies","receiveAssessmentConfigurations","setLocationInfo","baseUrl","document","getElementsByTagName","getAttribute","history","createBrowserHistory","basename","store","middleware","routerMiddleware","enhancers","createStore","compose","applyMiddleware","configureStore","window","initialReduxState","rootElement","getElementById","ReactDOM","render","Layout","exact","path","Home"],"mappings":"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","file":"static/js/main.c26a506d.chunk.js","sourcesContent":["const USER_RECEIVED = 'USER_RECEIVED';\r\nexport const onUserReceived = userData => ({\r\n type: USER_RECEIVED,\r\n payload: userData,\r\n});\r\n\r\nconst USER_EVENT_RECEIVED = 'USER_EVENT_RECEIVED';\r\nexport const receiveUserEvent = event => ({\r\n type: USER_EVENT_RECEIVED,\r\n payload: { event },\r\n});\r\n\r\nconst USER_QUIZ_RECEIVED = 'USER_QUIZ_RECEIVED';\r\nexport const receiveUserQuiz = quiz => ({\r\n type: USER_QUIZ_RECEIVED,\r\n payload: { quiz },\r\n});\r\n\r\nconst USER_SYNC_REQUESTED = 'USER_SYNC_REQUESTED';\r\nexport const syncUser = () => ({\r\n type: USER_SYNC_REQUESTED,\r\n});\r\n\r\nconst USER_REPORT_STATE_CHANGED = 'USER_REPORT_STATE_CHANGED';\r\nexport const changeReportState = show => ({\r\n type: USER_REPORT_STATE_CHANGED,\r\n payload: { show },\r\n});\r\n\r\nconst initialState = {\r\n sync: {},\r\n loaded: false,\r\n event: undefined,\r\n quiz: undefined,\r\n showReport: false,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case USER_RECEIVED:\r\n return action.payload ? { ...state, ...action.payload, loaded: true } : { ...state, loaded: true };\r\n case USER_SYNC_REQUESTED:\r\n return { ...state, sync: {} };\r\n case USER_EVENT_RECEIVED:\r\n return { ...state, event: action.payload.event };\r\n case USER_QUIZ_RECEIVED:\r\n return { ...state, quiz: action.payload.quiz };\r\n case USER_REPORT_STATE_CHANGED:\r\n return { ...state, showReport: action.payload.show };\r\n default:\r\n return state;\r\n }\r\n}","const COUNTRIES_RECEIVED = 'COUNTRIES/RECEIVED';\r\nexport const receiveCountries = countries => ({\r\n type: COUNTRIES_RECEIVED,\r\n payload: { countries },\r\n});\r\n\r\nconst initialState = [];\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case COUNTRIES_RECEIVED:\r\n return action.payload.countries;\r\n default:\r\n return state;\r\n }\r\n}","const CURRENCIES_RECEIVED = 'CURRENCIES/RECEIVED';\r\nexport const receiveCurrencies = currencies => ({\r\n type: CURRENCIES_RECEIVED,\r\n payload: { currencies },\r\n});\r\n\r\nconst initialState = [];\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case CURRENCIES_RECEIVED:\r\n return action.payload.currencies;\r\n default:\r\n return state;\r\n }\r\n}","const SNACKBAR_MESSAGE_SHOWED = 'SNACKBAR_MESSAGE_SHOWED';\r\nexport const showSnackbarMessage = (message, variant = 'success') => ({\r\n type: SNACKBAR_MESSAGE_SHOWED,\r\n payload: { message, variant },\r\n});\r\n\r\nconst SNACKBAR_MESSAGE_HIDDEN = 'SNACKBAR_MESSAGE_HIDDEN';\r\nexport const hideSnackbarMessage = () => ({\r\n type: SNACKBAR_MESSAGE_HIDDEN,\r\n});\r\n\r\nconst initialState = {\r\n show: false,\r\n message: null,\r\n variant: null,\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case SNACKBAR_MESSAGE_SHOWED:\r\n return { ...state, ...action.payload, show: true };\r\n case SNACKBAR_MESSAGE_HIDDEN:\r\n return { ...state, show: false };\r\n default:\r\n return state;\r\n }\r\n}","const DEPOSIT_OPTIONS_RECEIVED = 'DEPOSIT_OPTIONS_RECEIVED';\r\nexport const depositOptionsReceived = depositOptions => ({\r\n type: DEPOSIT_OPTIONS_RECEIVED,\r\n payload: { depositOptions },\r\n});\r\n\r\nconst DEPOSIT_OPTIONS_RESET = 'DEPOSIT_OPTIONS_RESET';\r\nexport const resetDepositOptions = () => ({\r\n type: DEPOSIT_OPTIONS_RESET,\r\n});\r\n\r\nconst initialState = [];\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case DEPOSIT_OPTIONS_RECEIVED:\r\n return action.payload.depositOptions;\r\n case DEPOSIT_OPTIONS_RESET:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n}","const ASSESSMENT_CONFIGURATIONS_RECEIVED = 'ASSESSMENT_CONFIGURATIONS/RECEIVED';\r\nexport const receiveAssessmentConfigurations = assessmentConfigurations => ({\r\n type: ASSESSMENT_CONFIGURATIONS_RECEIVED,\r\n payload: { assessmentConfigurations },\r\n});\r\n\r\nconst initialState = [];\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case ASSESSMENT_CONFIGURATIONS_RECEIVED:\r\n return action.payload.assessmentConfigurations;\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from 'redux';\r\nimport userReducer from './userReducer';\r\nimport countriesReducer from './countriesReducer';\r\nimport currenciesReducer from './currenciesReducer';\r\nimport snackbarReducer from './snackbarReducer';\r\nimport depositReducer from './depositReducer';\r\nimport assessmentConfigurationsReducer from './assessmentConfigurationsReducer';\r\n\r\nexport const rootReducer = combineReducers({\r\n user: userReducer,\r\n countries: countriesReducer,\r\n currencies: currenciesReducer,\r\n snackbar: snackbarReducer,\r\n depositOptions: depositReducer,\r\n assessmentConfigurations: assessmentConfigurationsReducer,\r\n});","export default {\r\n getLocationInfo: () => get('https://api.ipify.org').then(ip => get(`api/userLocationInfo/get/${ip}`)),\r\n\r\n getCurrencies: () => get('api/currencies/get'),\r\n\r\n getCountries: () => get('api/countries/get'),\r\n\r\n getAssessmentConfigurations: () => get('api/assessment/configurations'),\r\n\r\n startGame: input => post('api/user/start', input),\r\n\r\n getUserInfo: () => get('api/user/get'),\r\n\r\n getProgressInfo: () => get('api/user/progressInfo'),\r\n\r\n getTransactions: options => {\r\n const url = 'api/user/transactions';\r\n if (!options)\r\n return get(url);\r\n\r\n const { count, startWeek, endWeek } = options;\r\n return get(`${url}?count=${count}&startWeek=${startWeek}&endWeek=${endWeek}`);\r\n },\r\n\r\n getWeekInfo: () => get('api/user/weekInfo'),\r\n\r\n resetUser: () => post('api/user/reset'),\r\n\r\n nextWeek: () => post('api/user/nextWeek'),\r\n\r\n nextMonth: () => post('api/user/nextMonth'),\r\n\r\n openAccount: currency => post('api/user/openAccount', { currency }),\r\n\r\n currentAccountToSavings: (value, currency) => post('api/user/currentAccountToSavings', { value, currency }),\r\n\r\n savingsToCurrentAccount: (value, currency) => post('api/user/savingsToCurrentAccount', { value, currency }),\r\n\r\n getReports: () => get('api/user/reports'),\r\n\r\n getDepositOptions: () => get('api/deposit/getOptions'),\r\n\r\n deposit: (depositId, closable, amount, shouldCapitalize) => post('api/deposit/open', { depositId, closable, amount, shouldCapitalize }),\r\n\r\n addToDeposit: (depositId, amount) => post('api/deposit/addBalance', { depositId, amount }),\r\n\r\n closeDeposit: depositId => post('api/deposit/close', { depositId }),\r\n\r\n openCredit: (name, amount, duration, percentage) => post('api/credit/open', { name, amount, duration, percentage }),\r\n\r\n getExchangeRates: () => get('api/exchangerates/get'),\r\n\r\n convertAmountTo: (amount, fromCurrency, toCurrency, type) => post('api/exchangerates/convert', { amount, fromCurrency, toCurrency, type }),\r\n\r\n exchange: input => post('api/exchangerates/exchange', input),\r\n\r\n saveQuizResult: input => post('api/assessment/saveQuizResult', input),\r\n\r\n sendFeedback: feedback => post('api/user/feedback', { feedback }),\r\n\r\n getNonFinancialInvestments: () => get('api/nonFinancialInvestments/get'),\r\n\r\n buyNonFinancialInvestment: id => post('api/nonFinancialInvestments/buy', { id })\r\n}\r\n\r\nasync function get(url) {\r\n const response = await fetch(url);\r\n return processResponse(response);\r\n}\r\n\r\nasync function post(url, data = {}) {\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(data),\r\n });\r\n return processResponse(response);\r\n}\r\n\r\nfunction processResponse(response) {\r\n const contentType = response.headers.get('Content-Type');\r\n\r\n if (contentType && contentType.startsWith('application/json'))\r\n return response.json();\r\n\r\n return response.text();\r\n}","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Tooltip, CircularProgress, makeStyles } from '@material-ui/core';\r\nimport { NextWeek } from '@material-ui/icons';\r\nimport { onUserReceived, receiveUserEvent, receiveUserQuiz } from 'behavior';\r\nimport { green } from '@material-ui/core/colors';\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n display: 'flex',\r\n },\r\n buttonContainer: {\r\n display: 'inline-block',\r\n width: '40%',\r\n },\r\n iconContainer: {\r\n display: 'inline-block',\r\n width: '20%',\r\n },\r\n listItemText: {\r\n textAlign: 'center',\r\n '& span': {\r\n fontSize: 15,\r\n },\r\n },\r\n progress: {\r\n color: green[500],\r\n position: 'absolute',\r\n left: 0,\r\n marginTop: -6,\r\n marginLeft: -8,\r\n },\r\n});\r\n\r\nconst IncrementWeeksButtons = ({ accounts, defaultCurrency, onUserReceived, receiveUserEvent, receiveUserQuiz }) => {\r\n const classes = useStyles();\r\n const [loading, setLoading] = useState(false);\r\n const negativeBalance = accounts.find(a => a.currency === defaultCurrency).value < 0;\r\n const isDisabled = loading || negativeBalance;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n {loading && }\r\n \r\n \r\n
\r\n \r\n
\r\n {\r\n setLoading(true);\r\n api.nextWeek().then(({ userData, userEvent, userQuiz }) => {\r\n onUserReceived(userData);\r\n receiveUserEvent(userEvent);\r\n receiveUserQuiz(userQuiz);\r\n setTimeout(() => setLoading(false), 200);\r\n });\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {\r\n setLoading(true);\r\n api.nextMonth().then(({ userData, userEvent, userQuiz }) => {\r\n onUserReceived(userData);\r\n receiveUserEvent(userEvent);\r\n receiveUserQuiz(userQuiz);\r\n setTimeout(() => setLoading(false), 200);\r\n });\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { accounts, defaultCurrency } }) => ({ accounts, defaultCurrency }),\r\n { onUserReceived, receiveUserEvent, receiveUserQuiz },\r\n)(IncrementWeeksButtons);\r\n\r\nconst negativeBalanceText = `You are not able to move to next week while your default account is negative.\r\nConsider positive balance on your default account or open \"Credit\"`;","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { changeReportState } from 'behavior';\r\nimport { ListItem, ListItemIcon, ListItemText } from '@material-ui/core';\r\nimport { TrendingUp } from '@material-ui/icons';\r\n\r\nconst ReportButton = ({ changeReportState }) => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default connect(undefined, { changeReportState })(ReportButton);","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { syncUser } from 'behavior';\r\nimport { ListItem, ListItemIcon, ListItemText, Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@material-ui/core';\r\nimport { Update } from '@material-ui/icons';\r\n\r\nconst ResetGameButton = ({ syncUser }) => {\r\n const [confirm, setConfirm] = useState(false);\r\n return (\r\n <>\r\n setConfirm(true)}>\r\n \r\n \r\n \r\n \r\n Are you sure you want to reset?\r\n \r\n Reseting the game your progress will be lost for you. You'll need to select start options again.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(undefined, { syncUser })(ResetGameButton);","import React from 'react';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\n\r\nexport default ({ value, currency = null, pre = null }) => (\r\n <>{pre}{+parseFloat(value).toFixed(2)} {getCurrencySymbol(currency)}\r\n);","import 'currency-flags/dist/currency-flags.min.css';\r\nimport React from 'react';\r\nimport { makeStyles, TextField } from '@material-ui/core';\r\nimport { Autocomplete } from '@material-ui/lab';\r\n\r\nconst useStyles = makeStyles({\r\n option: {\r\n fontSize: 15,\r\n '& > .currency-flag': {\r\n marginRight: 10,\r\n },\r\n },\r\n});\r\n\r\nconst CurrencyAutocomplete = ({ options, label = 'Currency', value, onChange, onBlur, ...props }) => {\r\n const styles = useStyles();\r\n\r\n return (\r\n `${option.code} - ${option.name}`}\r\n classes={{ option: styles.option }}\r\n autoHighlight\r\n onChange={(_, currency) => onChange(currency ? currency.code : null)}\r\n onBlur={onBlur}\r\n renderOption={currency => (\r\n <>\r\n \r\n {currency.code} - {currency.name}\r\n \r\n )}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default CurrencyAutocomplete;","import 'currency-flags/dist/currency-flags.css';\r\nimport React from 'react';\r\nimport { makeStyles, TableCell } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles({\r\n image: {\r\n verticalAlign: 'middle',\r\n marginRight: 10,\r\n },\r\n});\r\n\r\nconst CurrencyTableCell = ({ currency }) => {\r\n const styles = useStyles();\r\n\r\n return (\r\n \r\n \r\n {currency}\r\n \r\n );\r\n};\r\n\r\nexport default CurrencyTableCell;","import 'flag-icon-css/css/flag-icon.min.css';\r\nimport React from 'react';\r\nimport { TextField, makeStyles } from '@material-ui/core';\r\nimport { Autocomplete } from '@material-ui/lab';\r\n\r\nconst useStyles = makeStyles({\r\n option: {\r\n fontSize: 15,\r\n '& > .flag-icon': {\r\n marginRight: 10,\r\n },\r\n },\r\n});\r\n\r\nconst CountryAutocomplete = ({ options, label = 'Country', value, onChange, onBlur, ...props }) => {\r\n const styles = useStyles();\r\n\r\n return (\r\n `${option.code} - ${option.name}`}\r\n classes={{ option: styles.option }}\r\n autoHighlight\r\n onChange={(_, country) => onChange(country ? country.code : null)}\r\n onBlur={onBlur}\r\n renderOption={country => (\r\n <>\r\n \r\n {country.code} - {country.name}\r\n \r\n )}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default CountryAutocomplete;","import React, { useState } from 'react';\r\nimport { List, ListItem, ListItemText, makeStyles, Collapse } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n nested: {\r\n paddingLeft: theme.spacing(4),\r\n },\r\n}));\r\n\r\nconst AccountInfo = ({ salary, spending }) => {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(true);\r\n\r\n return (\r\n \r\n \r\n \r\n {open ? : }\r\n \r\n \r\n \r\n \r\n } />\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default connect(({ user: { salary, spending } }) => ({\r\n salary,\r\n spending,\r\n}))(AccountInfo);","import React, { useState, useMemo } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { makeStyles, Typography, List, ListItem, ListItemIcon, ListItemText, Collapse } from '@material-ui/core';\r\nimport { ExpandLess, ExpandMore, CheckCircle, Cancel } from '@material-ui/icons';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n '*::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '*::-webkit-scrollbar-track': {\r\n '-webkit-box-shadow': 'inset 0 0 6px rgba(0,0,0,0.00)'\r\n },\r\n '*::-webkit-scrollbar-thumb': {\r\n backgroundColor: 'rgba(0,0,0,.1)',\r\n outline: '1px solid slategrey'\r\n }\r\n },\r\n list: {\r\n maxHeight: 500,\r\n overflow: 'auto',\r\n },\r\n nested: {\r\n paddingLeft: theme.spacing(2),\r\n marginBottom: 10,\r\n },\r\n category: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(2),\r\n fontSize: 16,\r\n },\r\n assessmentItem: {\r\n padding: 0,\r\n paddingRight: theme.spacing(2),\r\n '& span': {\r\n fontSize: 13,\r\n },\r\n },\r\n iconWrapper: {\r\n minWidth: 34,\r\n },\r\n green: {\r\n color: 'green',\r\n },\r\n red: {\r\n color: 'red',\r\n },\r\n}));\r\n\r\nconst AssessmentInfo = ({ passedAssessmentIds, assessmentConfigurations }) => {\r\n const styles = useStyles();\r\n const [open, setOpen] = useState(true);\r\n\r\n const points = useMemo(() => {\r\n const result = {};\r\n for (const item of assessmentConfigurations) {\r\n result[item.category] = 0;\r\n for (const config of item.configurations)\r\n passedAssessmentIds.includes(config.id) && (result[item.category] += config.points);\r\n }\r\n return result;\r\n }, [passedAssessmentIds, assessmentConfigurations]);\r\n\r\n const getIcon = id => {\r\n if (passedAssessmentIds.includes(id))\r\n return ;\r\n\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {open ? : }\r\n \r\n \r\n {assessmentConfigurations.map(i => (\r\n
\r\n \r\n {i.category} ({points[i.category]}%)\r\n \r\n \r\n {i.configurations.map(config => (\r\n \r\n {getIcon(config.id)}\r\n \r\n \r\n ))}\r\n \r\n
\r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default connect(\r\n ({ user: { passedAssessmentIds }, assessmentConfigurations }) => ({ passedAssessmentIds, assessmentConfigurations }),\r\n)(AssessmentInfo);","import React, { useState } from 'react';\r\nimport {\r\n AppBar, Toolbar, Typography,\r\n Drawer, IconButton, makeStyles,\r\n Hidden, Divider, List, CssBaseline, ListItem, ListItemText,\r\n} from '@material-ui/core';\r\nimport { Menu } from '@material-ui/icons';\r\nimport IncrementWeeksButtons from './IncrementWeeksButtons';\r\nimport ReportButton from './ReportButton';\r\nimport ResetGameButton from './ResetGameButton';\r\nimport { connect } from 'react-redux';\r\nimport AccountInfo from './AccountInfo';\r\nimport AssessmentInfo from './AssessmentInfo';\r\n\r\nconst drawerWidth = 240;\r\nconst useStyles = makeStyles(theme => ({\r\n drawer: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n },\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n drawerPaper: {\r\n width: drawerWidth,\r\n },\r\n}));\r\n\r\nconst Navigation = ({ gameStarted, currentWeek, assessmentEnabled, isReportAvailable }) => {\r\n const classes = useStyles();\r\n const [mobileOpen, setMobileOpen] = useState(false);\r\n if (!gameStarted)\r\n return null;\r\n\r\n const handleDrawerToggle = () => {\r\n setMobileOpen(!mobileOpen);\r\n };\r\n\r\n const drawer = (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isReportAvailable && }\r\n {!isReportAvailable && (\r\n \r\n Report results in {60 - currentWeek} week(s)\r\n \r\n )}\r\n \r\n \r\n {assessmentEnabled && (\r\n <>\r\n {currentWeek / 4 >= 6\r\n ? \r\n : (\r\n \r\n Assessments in {24 - currentWeek} week(s)\r\n \r\n )\r\n }\r\n \r\n )}\r\n
\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Personal Finance - Week {currentWeek}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default connect(\r\n ({ user: { gameStarted, currentWeek, assessmentEnabled, isReportAvailable } }) => (\r\n { gameStarted, currentWeek, assessmentEnabled, isReportAvailable }\r\n ),\r\n)(Navigation);","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport Navigation from './navigation/Navigation';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n },\r\n}));\r\n\r\nexport default ({ children }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { hideSnackbarMessage } from 'behavior';\r\nimport { Snackbar, Typography } from '@material-ui/core';\r\nimport { Alert } from '@material-ui/lab';\r\n\r\nconst SnackbarAlert = ({ show, message, variant, hideSnackbarMessage }) => (\r\n \r\n \r\n {message}\r\n \r\n \r\n);\r\n\r\nexport default connect(({ snackbar: { show, message, variant } }) => ({ show, message, variant }), { hideSnackbarMessage })(SnackbarAlert);","import React from 'react';\r\nimport {\r\n makeStyles, Typography, Button, Dialog, DialogActions,\r\n Card, CardMedia, CardContent,\r\n} from '@material-ui/core';\r\nimport { Alert } from '@material-ui/lab';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n maxWidth: 350,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n warning: {\r\n marginTop: 20,\r\n },\r\n});\r\n\r\nconst UserEventDialog = ({ event, open, onClose }) => {\r\n const styles = useStyles();\r\n\r\n let duration;\r\n if (event.duration.from < 100) {\r\n if (event.duration.from === event.duration.to) {\r\n duration = `${event.duration.from} week`;\r\n if (event.duration.from > 1)\r\n duration += 's';\r\n }\r\n else\r\n duration = `${event.duration.from} - ${event.duration.to} weeks`;\r\n }\r\n let spendingText;\r\n if ((event.duration.from === event.duration.to) === 1) {\r\n spendingText = <>You spent on it.;\r\n } else {\r\n spendingText = <>Your first spending is .;\r\n }\r\n\r\n return (\r\n \r\n \r\n {event.image && }\r\n \r\n {event.title}\r\n {event.description}\r\n \r\n You incur additional costs for {duration || 'this'}, see them in the \"Weekly update\" section. {spendingText}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UserEventDialog;","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { receiveUserEvent } from 'behavior';\r\nimport UserEventDialog from './UserEventDialog';\r\n\r\nconst UserEventHandler = ({ event, receiveUserEvent }) => {\r\n const [dialogOpen, setDialogOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n event && setDialogOpen(true);\r\n }, [event]);\r\n\r\n const handleClose = useCallback(() => {\r\n receiveUserEvent(null);\r\n setDialogOpen(false);\r\n }, [receiveUserEvent]);\r\n\r\n return event ? : null;\r\n};\r\n\r\nexport default connect(({ user: { event } }) => ({ event }), { receiveUserEvent })(UserEventHandler);","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n makeStyles, Typography, Button, Dialog, DialogActions,\r\n Card, CardContent, Stepper, Step, StepLabel, FormControl, RadioGroup, FormControlLabel, Radio, FormHelperText,\r\n} from '@material-ui/core';\r\nimport api from 'utils/api';\r\nimport { onUserReceived } from 'behavior';\r\nimport { useEffect } from 'react';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n maxWidth: 500,\r\n },\r\n title: {\r\n fontSize: 20,\r\n fontWeight: 'bold',\r\n marginBottom: 20,\r\n },\r\n green: {\r\n color: 'green',\r\n },\r\n});\r\n\r\nconst UserQuizDialog = ({ quiz, open, onClose, onUserReceived }) => {\r\n const styles = useStyles();\r\n const [activeStep, setActiveStep] = useState(0);\r\n const [stepsData, setStepsData] = useState(quiz.questions.map(question => ({ id: question.id, answers: [] })));\r\n const [helperText, setHelperText] = useState();\r\n const [isError, setIsError] = useState(false);\r\n\r\n useEffect(() => { setHelperText('') }, [activeStep]);\r\n\r\n const validate = input => {\r\n const correctAnswers = quiz.questions[activeStep].answers.filter(a => a.isCorrect).map(a => a.id).sort();\r\n const answers = input.find(i => i.id === quiz.questions[activeStep].id).answers.sort();\r\n if (JSON.stringify(correctAnswers) !== JSON.stringify(answers)) {\r\n setHelperText('Sorry, wrong answer!');\r\n setIsError(true);\r\n return false;\r\n }\r\n\r\n setHelperText('Yes, it is correct!');\r\n setIsError(false);\r\n return true;\r\n };\r\n\r\n const handleBack = () => setActiveStep(prevActiveStep => prevActiveStep - 1);\r\n const handleNext = async () => {\r\n if (!validate(stepsData) && activeStep !== 1)\r\n return;\r\n\r\n if (activeStep + 1 < quiz.questions.length) {\r\n setActiveStep(prevActiveStep => prevActiveStep + 1);\r\n } else {\r\n await api.saveQuizResult({ quizId: quiz.id, questions: stepsData }).then(data => {\r\n onUserReceived(data);\r\n onClose();\r\n });\r\n }\r\n };\r\n\r\n const handleRadioChange = e => {\r\n const questionId = quiz.questions[activeStep].id;\r\n const input = { id: questionId, answers: [e.target.value] };\r\n const questionsInput = stepsData.filter(i => i.id !== questionId);\r\n questionsInput.push(input);\r\n setStepsData(questionsInput);\r\n validate(questionsInput);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {quiz.questions.length > 1 && (\r\n \r\n {quiz.questions.map(question => (\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n
\r\n {quiz.questions[activeStep].title}\r\n {quiz.questions[activeStep].type === 'Radios' ? (\r\n \r\n i.id === quiz.questions[activeStep].id).answers[0] || ''} onChange={handleRadioChange}>\r\n {quiz.questions[activeStep].answers.map(answer => (\r\n } label={answer.title} />\r\n ))}\r\n \r\n {helperText}\r\n \r\n ) : <>}\r\n
\r\n
\r\n \r\n {quiz.questions.length > 1 && (\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(undefined, { onUserReceived })(UserQuizDialog);","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { receiveUserQuiz } from 'behavior';\r\nimport UserQuizDialog from './UserQuizDialog';\r\n\r\nconst UserQuizHandler = ({ quiz, receiveUserQuiz }) => {\r\n const [dialogOpen, setDialogOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n quiz && setDialogOpen(true);\r\n }, [quiz]);\r\n\r\n const handleClose = useCallback(() => {\r\n receiveUserQuiz(null);\r\n setDialogOpen(false);\r\n }, [receiveUserQuiz]);\r\n\r\n return quiz ? : null;\r\n};\r\n\r\nexport default connect(({ user: { quiz } }) => ({ quiz }), { receiveUserQuiz })(UserQuizHandler);","import 'flag-icon-css/css/flag-icon.min.css';\r\nimport React, { useState, useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n makeStyles, Button, Dialog, DialogActions, Grid, DialogTitle, DialogContent, DialogContentText,\r\n TextField, MenuItem, Typography\r\n} from '@material-ui/core';\r\nimport api from 'utils/api';\r\nimport ReactEcharts from 'echarts-for-react';\r\nimport { useFormik } from 'formik';\r\nimport { showSnackbarMessage } from 'behavior';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n '& .MuiSelect-root .flag-icon': {\r\n display: 'none'\r\n }\r\n },\r\n dialogTitle: {\r\n '& h2': {\r\n fontSize: 25\r\n }\r\n },\r\n subTitle: {\r\n fontSize: 20,\r\n lineHeight: '32px',\r\n },\r\n feedbackTitle: {\r\n marginTop: '40px',\r\n },\r\n chart: {\r\n width: '100%',\r\n height: '400px !important'\r\n },\r\n countrySelect: {\r\n width: '100%',\r\n '& .MuiInput-formControl': {\r\n marginTop: 0\r\n }\r\n },\r\n option: {\r\n '& > .flag-icon': {\r\n marginRight: 10\r\n }\r\n }\r\n});\r\n\r\nconst UserReportDialog = ({ open, onClose, userCountryId, countries, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n const [userReports, setUserReports] = useState();\r\n const [countryReports, setCountryReports] = useState();\r\n const [selectedCountryId, setCountryId] = useState(userCountryId);\r\n\r\n useEffect(() => {\r\n api.getReports().then(({ userReportCategories, countryReportCategories }) => {\r\n setUserReports(userReportCategories);\r\n setCountryReports(countryReportCategories);\r\n });\r\n }, []);\r\n\r\n const handleCountryChange = useCallback(e => setCountryId(e.target.value), []);\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n feedback: '',\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.feedback)\r\n errors.feedback = `Please put your feedback here`;\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ feedback }) => {\r\n api.sendFeedback(feedback).then(() => {\r\n showSnackbarMessage('Thank you for your feedback!')\r\n closeDialog();\r\n })\r\n }\r\n });\r\n\r\n const closeDialog = () => {\r\n onClose();\r\n formik.resetForm();\r\n };\r\n\r\n return !userReports || !countryReports ? null : (\r\n \r\n
\r\n Your 60 weeks report is ready!\r\n \r\n \r\n Thank you for participating in Personal Finance simulator development.
\r\n You are still able to proceed with implementing any ideas you want to try.
\r\n There is just a report for your first 60 weeks.
\r\n You can compare it with other game sessions for your country or select different country to compare.
\r\n
\r\n \r\n \r\n You results\r\n \r\n \r\n \r\n \r\n \r\n Country results\r\n \r\n \r\n \r\n {countryReports.map(r => (\r\n \r\n {(() => {\r\n const country = countries.find(c => c.code === r.countryId);\r\n return (\r\n <>\r\n \r\n {country.code} - {country.name}\r\n \r\n );\r\n })()}\r\n \r\n ))}\r\n \r\n \r\n \r\n c.countryId === selectedCountryId).reportCategories)} />\r\n \r\n We need your feedback\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { country }, countries }) => ({ userCountryId: country, countries }), { showSnackbarMessage })(UserReportDialog);\r\n\r\nfunction createOption(items) {\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: 'Week {b}
{a0}: {c0} $
{a1}: {c1} $
{a2}: {c2} $'\r\n },\r\n legend: {\r\n bottom: 0,\r\n data: items.map(i => i.category)\r\n },\r\n grid: {\r\n top: 20,\r\n left: '3%',\r\n right: '3%',\r\n bottom: 40,\r\n containLabel: true\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: items[0].data.map(i => i.week)\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLabel: {\r\n formatter: '{value} $'\r\n }\r\n },\r\n series: items.map(i => ({\r\n name: i.category,\r\n type: 'line',\r\n data: i.data.map(d => d.amount)\r\n }))\r\n };\r\n}","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { changeReportState } from 'behavior';\r\nimport UserReportDialog from './UserReportDialog';\r\n\r\nconst UserReportHandler = ({ isReportAvailable, reportNotify, showReport, changeReportState }) => {\r\n useEffect(() => {\r\n reportNotify && changeReportState(true);\r\n }, [reportNotify]);\r\n\r\n return isReportAvailable ? : null;\r\n};\r\n\r\nexport default connect(\r\n ({ user: { isReportAvailable, reportNotify, showReport } }) => ({ isReportAvailable, reportNotify, showReport }),\r\n { changeReportState },\r\n)(UserReportHandler);","import React, { useState } from 'react';\r\nimport { makeStyles, Card, CardHeader, Collapse, IconButton } from '@material-ui/core';\r\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n '& .MuiCardContent-root, & .MuiList-root, & .MuiList-root div': {\r\n paddingTop: 0,\r\n marginTop: 0,\r\n },\r\n },\r\n});\r\n\r\nconst CollapsibleCard = ({ title, children, ...props }) => {\r\n const styles = useStyles();\r\n const [expanded, setExpanded] = useState(true);\r\n\r\n return (\r\n \r\n {expanded ? : }}\r\n />\r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CollapsibleCard;","import React, { useMemo, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useFormik } from 'formik';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport {\r\n makeStyles,\r\n Button,\r\n FormControl,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n} from '@material-ui/core';\r\nimport { CurrencyAutocomplete } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n minWidth: 350,\r\n },\r\n});\r\n\r\nconst OpenAccountDialog = ({ accounts, currencies, open, onClose, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n const availableCurrencies = useMemo(() => {\r\n const usedCurrencies = accounts.map(a => a.currency);\r\n return currencies.filter(c => !usedCurrencies.includes(c.code));\r\n }, [accounts, currencies]);\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n currency: '',\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.currency)\r\n errors.currency = 'Currency is required.';\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ currency }) => api.openAccount(currency).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>You have opened a new account in {currency}.);\r\n onClose();\r\n }),\r\n });\r\n\r\n useEffect(() => { !open && setTimeout(formik.resetForm, 100); }, [open]);\r\n\r\n return (\r\n \r\n
\r\n Open account\r\n \r\n Select the currency in which you want to have a new account.\r\n \r\n formik.setFieldValue('currency', value)}\r\n onBlur={() => formik.setFieldTouched('currency', true)}\r\n error={formik.touched.currency && !!formik.errors.currency}\r\n helperText={formik.touched.currency && formik.errors.currency}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { accounts }, currencies }) => ({ accounts, currencies }),\r\n { onUserReceived, showSnackbarMessage },\r\n)(OpenAccountDialog);","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useFormik } from 'formik';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport {\r\n makeStyles,\r\n Button,\r\n FormControl,\r\n TextField,\r\n MenuItem,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n} from '@material-ui/core';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n '& .MuiSelect-root .currency-flag': {\r\n display: 'none'\r\n }\r\n },\r\n option: {\r\n '& > .currency-flag': {\r\n marginRight: 10\r\n }\r\n },\r\n formControl: {\r\n display: 'inline-block',\r\n marginRight: theme.spacing(1)\r\n }\r\n}));\r\n\r\nconst ToSavingsDialog = ({ defaultCurrency, accounts, open, onClose, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n amount: '',\r\n currency: defaultCurrency,\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.amount || values.amount < 0)\r\n errors.amount = 'Amount is required.';\r\n\r\n else if (Number.isNaN(Number(values.amount)))\r\n errors.amount = 'Amount must be a number.';\r\n\r\n const accountAmount = accounts.find(a => a.currency === values.currency).value;\r\n if (values.amount > accountAmount)\r\n errors.amount = <>You cannot save more than .;\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ amount, currency }) => api.currentAccountToSavings(parseFloat(amount), currency).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>You saved from your current account.);\r\n onClose();\r\n }),\r\n });\r\n\r\n useEffect(() => { !open && setTimeout(formik.resetForm, 100); }, [open]);\r\n\r\n return (\r\n \r\n
\r\n Save your money\r\n \r\n Enter amount you want to save.\r\n \r\n \r\n \r\n {accounts.length > 1 && (\r\n \r\n \r\n {accounts.map(a => (\r\n \r\n \r\n {a.currency}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { defaultCurrency, accounts } }) => ({ defaultCurrency, accounts }),\r\n { onUserReceived, showSnackbarMessage },\r\n)(ToSavingsDialog);","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useFormik } from 'formik';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport {\r\n makeStyles, Button, FormControl, TextField, MenuItem,\r\n Dialog, DialogTitle, DialogContent, DialogActions\r\n} from '@material-ui/core';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n '& .MuiSelect-root .currency-flag': {\r\n display: 'none'\r\n }\r\n },\r\n option: {\r\n '& > .currency-flag': {\r\n marginRight: 10\r\n }\r\n },\r\n formControl: {\r\n display: 'inline-block',\r\n '&:not(:last-child)': {\r\n marginRight: theme.spacing(1)\r\n }\r\n },\r\n formGroup: {\r\n margin: '20px 0'\r\n }\r\n}));\r\n\r\nconst ExchangeDialog = ({ defaultCurrency, accounts, open, onClose, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n from: { value: '', currency: defaultCurrency },\r\n to: { value: '', currency: accounts[1].currency },\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.from.value || values.from.value < 0) {\r\n errors.from = {};\r\n errors.from.value = 'Amount is required.';\r\n } else if (Number.isNaN(Number(values.from.value))) {\r\n errors.from = {};\r\n errors.from.value = 'Amount must be a number.';\r\n }\r\n\r\n const accountAmount = accounts.find(a => a.currency === values.from.currency).value;\r\n if (values.from.value > +parseFloat(accountAmount).toFixed(2)) {\r\n errors.from = errors.from || {};\r\n errors.from.value = `You do not have enough money on your ${values.from.currency} account.`;\r\n }\r\n\r\n if (values.from.currency === values.to.currency) {\r\n errors.from = errors.from || {};\r\n errors.from.value = `You cannot buy the same currency.`;\r\n }\r\n\r\n if (!values.to.value || values.to.value < 0) {\r\n errors.to = {};\r\n errors.to.value = 'Amount is required.';\r\n } else if (Number.isNaN(Number(values.to.value))) {\r\n errors.to = {};\r\n errors.to.value = 'Amount must be a number.';\r\n }\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ from, to }) => api.exchange(\r\n {\r\n from: { value: parseFloat(from.value), currency: from.currency },\r\n to: { value: parseFloat(to.value), currency: to.currency },\r\n }\r\n ).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>You spent to buy .);\r\n onClose();\r\n }),\r\n });\r\n\r\n useEffect(() => { !open && setTimeout(formik.resetForm, 100); }, [open]);\r\n\r\n const getAnotherCurrency = currency => {\r\n for (const account of accounts) {\r\n if (account.currency !== currency)\r\n return account.currency;\r\n }\r\n }\r\n\r\n const handleFromValueChange = async e => {\r\n const value = e.target.value;\r\n const number = +parseFloat(value).toFixed(2);\r\n const isNan = Number.isNaN(Number(value));\r\n formik.setFieldValue('from.value', !value || isNan || value.endsWith('.') ? value : number, false);\r\n formik.setFieldTouched('from.value', true, false);\r\n if (isNan)\r\n return;\r\n\r\n if (number > 0) {\r\n const result = await api.convertAmountTo(parseFloat(e.target.value), formik.values.from.currency, formik.values.to.currency, 'buy');\r\n formik.setFieldValue('to.value', +parseFloat(result).toFixed(2), false);\r\n formik.setFieldTouched('to.value', true, true);\r\n } else {\r\n formik.setFieldValue('to.value', '', false);\r\n formik.setFieldTouched('to.value', true, true);\r\n }\r\n };\r\n\r\n const handleFromCurrencyChange = async e => {\r\n const currency = e.target.value;\r\n formik.setFieldValue('from.currency', currency, false);\r\n formik.setFieldTouched('from.currency', true, false);\r\n\r\n let toCurrency = formik.values.to.currency;\r\n if (currency === toCurrency) {\r\n toCurrency = getAnotherCurrency(currency);\r\n formik.setFieldValue('to.currency', toCurrency, false);\r\n }\r\n\r\n if (formik.values.from.value > 0) {\r\n const result = await api.convertAmountTo(parseFloat(formik.values.from.value), currency, toCurrency, 'buy');\r\n formik.setFieldValue('to.value', +parseFloat(result).toFixed(2), false);\r\n formik.setFieldTouched('to.value', true, true);\r\n } else if (formik.values.to.value) {\r\n formik.setFieldValue('to.value', '', false);\r\n formik.setFieldTouched('to.value', true, true);\r\n }\r\n };\r\n\r\n const handleToValueChange = async e => {\r\n const value = e.target.value;\r\n const number = +parseFloat(value).toFixed(2);\r\n const isNan = Number.isNaN(Number(value));\r\n formik.setFieldValue('to.value', !value || isNan || value.endsWith('.') ? value : number, false);\r\n formik.setFieldTouched('to.value', true, false);\r\n if (isNan)\r\n return;\r\n\r\n if (number > 0) {\r\n const result = await api.convertAmountTo(parseFloat(e.target.value), formik.values.to.currency, formik.values.from.currency, 'sell');\r\n formik.setFieldValue('from.value', +parseFloat(result).toFixed(2), false);\r\n formik.setFieldTouched('from.value', true, true);\r\n } else {\r\n formik.setFieldValue('from.value', '', false);\r\n formik.setFieldTouched('from.value', true, true);\r\n }\r\n };\r\n\r\n const handleToCurrencyChange = async e => {\r\n const currency = e.target.value;\r\n formik.setFieldValue('to.currency', currency, false);\r\n formik.setFieldTouched('to.currency', true, false);\r\n\r\n let fromCurrency = formik.values.from.currency;\r\n if (currency === fromCurrency) {\r\n fromCurrency = getAnotherCurrency(currency);\r\n formik.setFieldValue('from.currency', fromCurrency, false);\r\n }\r\n\r\n if (formik.values.to.value > 0) {\r\n const result = await api.convertAmountTo(parseFloat(formik.values.to.value), currency, fromCurrency, 'sell');\r\n formik.setFieldValue('from.value', +parseFloat(result).toFixed(2), false);\r\n formik.setFieldTouched('from.value', true, true);\r\n } else if (formik.values.from.value) {\r\n formik.setFieldValue('from.value', '', false);\r\n formik.setFieldTouched('from.value', true, true);\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n Exchange\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {accounts.map(a => (\r\n \r\n \r\n {a.currency}\r\n \r\n ))}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {accounts.map(a => (\r\n \r\n \r\n {a.currency}\r\n \r\n ))}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { defaultCurrency, accounts } }) => ({ defaultCurrency, accounts }),\r\n { onUserReceived, showSnackbarMessage },\r\n)(ExchangeDialog);","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { CardContent, CardActions, Table, TableBody, TableRow, TableCell, Button } from '@material-ui/core';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport { Amount, CurrencyTableCell } from 'components/primitives';\r\nimport OpenAccountDialog from './OpenAccountDialog';\r\nimport ToSavingsDialog from './ToSavingsDialog';\r\nimport ExchangeDialog from './ExchangeDialog';\r\n\r\nconst GeneralInfoCard = ({ accounts, currencies }) => {\r\n const [openAccountDialogOpen, setOpenAccountDialogOpen] = useState(false);\r\n const [toSavingsDialogOpen, setToSavingsDialogOpen] = useState(false);\r\n const [exchangeDialogOpen, setExchangeDialogOpen] = useState(false);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {accounts.map(a => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n {accounts.length !== currencies.length && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {accounts.length > 1 && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts }, currencies }) => ({ accounts, currencies }))(GeneralInfoCard);","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useFormik } from 'formik';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport {\r\n makeStyles,\r\n Button,\r\n FormControl,\r\n TextField,\r\n MenuItem,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogContentText,\r\n DialogActions,\r\n} from '@material-ui/core';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n '& .MuiSelect-root .currency-flag': {\r\n display: 'none'\r\n }\r\n },\r\n option: {\r\n '& > .currency-flag': {\r\n marginRight: 10\r\n }\r\n },\r\n formControl: {\r\n display: 'inline-block',\r\n marginRight: theme.spacing(1)\r\n }\r\n}));\r\n\r\nconst ToCurrentAccountDialog = ({ defaultCurrency, accounts, savings, open, onClose, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n amount: '',\r\n currency: defaultCurrency,\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.amount || values.amount < 0)\r\n errors.amount = 'Amount is required.';\r\n\r\n else if (Number.isNaN(Number(values.amount)))\r\n errors.amount = 'Amount must be a number.';\r\n\r\n const cashAmount = savings.find(a => a.currency === values.currency).value;\r\n if (values.amount > cashAmount)\r\n errors.amount = <>You cannot transfer more than .;\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ amount, currency }) => api.savingsToCurrentAccount(parseFloat(amount), currency).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>You transferred from savings to your current account.);\r\n onClose();\r\n }),\r\n });\r\n\r\n useEffect(() => { !open && setTimeout(formik.resetForm, 100); }, [open]);\r\n\r\n return (\r\n \r\n
\r\n Transfer savings to current account\r\n \r\n \r\n Enter the amount to be transferred to your current account.\r\n \r\n \r\n \r\n \r\n {accounts.length > 1 && (\r\n \r\n \r\n {accounts.map(a => (\r\n \r\n \r\n {a.currency}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { defaultCurrency, accounts, savings } }) => ({ defaultCurrency, accounts, savings }),\r\n { onUserReceived, showSnackbarMessage },\r\n)(ToCurrentAccountDialog);","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { CardContent, CardActions, Table, TableBody, TableRow, TableCell, Button } from '@material-ui/core';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport { Amount, CurrencyTableCell } from 'components/primitives';\r\nimport ToCurrentAccountDialog from './ToCurrentAccountDialog';\r\n\r\nconst SavingsCard = ({ savings }) => {\r\n const [toCurrentAccountDialogOpen, setToCurrentAccountDialogOpen] = useState(false);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {savings.map(a => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { savings } }) => ({ savings }))(SavingsCard);","import React, { useState, useMemo, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { makeStyles, CardContent, Grid, TextField, MenuItem } from '@material-ui/core';\r\nimport CollapsibleCard from './CollapsibleCard';\r\nimport ReactEcharts from 'echarts-for-react';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n '& .MuiSelect-root .currency-flag': {\r\n display: 'none'\r\n }\r\n },\r\n currencySelect: {\r\n width: '100%',\r\n '& .MuiInput-formControl': {\r\n marginTop: 0\r\n }\r\n },\r\n option: {\r\n '& > .currency-flag': {\r\n marginRight: 10\r\n }\r\n }\r\n});\r\n\r\nconst WeekUpdateCard = ({ accounts, defaultCurrency, currencies }) => {\r\n const styles = useStyles();\r\n const [data, setData] = useState([]);\r\n const [selectedId, setId] = useState(defaultCurrency);\r\n const selectedItem = useMemo(() => data.find(item => item.id === selectedId), [data, selectedId]);\r\n const selectedCurrency = useMemo(() => selectedItem && (currencies.find(c => c.code === selectedItem.id) || { code: 'USD' }), [currencies, selectedItem]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setData(await api.getWeekInfo());\r\n })();\r\n }, [accounts]);\r\n\r\n return (\r\n \r\n {data.length !== 0 && (\r\n \r\n {accounts.length > 1 && (\r\n \r\n setId(e.target.value)}\r\n className={styles.currencySelect}\r\n >\r\n {data.map(r => (\r\n \r\n {(() => {\r\n const currency = currencies.find(c => c.code === r.id);\r\n return (\r\n <>\r\n \r\n {(currency && currency.code) || 'Accounts total amount in USD'}\r\n \r\n );\r\n })()}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts, defaultCurrency }, currencies }) => ({ accounts, defaultCurrency, currencies }))(WeekUpdateCard);\r\n\r\nfunction createOption(transactions, currencyCode) {\r\n const emphasisStyle = {\r\n itemStyle: {\r\n barBorderWidth: 1,\r\n shadowBlur: 10,\r\n shadowOffsetX: 0,\r\n shadowOffsetY: 0,\r\n shadowColor: 'rgba(0,0,0,0.5)'\r\n }\r\n };\r\n\r\n return {\r\n tooltip: {\r\n trigger: 'item',\r\n formatter: `{a}: {c} ${getCurrencySymbol(currencyCode)}`\r\n },\r\n grid: {\r\n top: 20,\r\n left: '3%',\r\n right: '3%',\r\n bottom: 40,\r\n containLabel: true\r\n },\r\n xAxis: {\r\n data: ['Income', 'Output'],\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLabel: {\r\n formatter: `{value} ${getCurrencySymbol(currencyCode)}`\r\n }\r\n },\r\n series: [\r\n ...transactions.filter(i => i.amount >= 0).map(i => ({\r\n name: i.title,\r\n type: 'bar',\r\n stack: 'one',\r\n emphasis: emphasisStyle,\r\n data: [i.amount, 0]\r\n })),\r\n ...transactions.filter(i => i.amount < 0).map(i => ({\r\n name: i.title,\r\n type: 'bar',\r\n stack: 'one',\r\n emphasis: emphasisStyle,\r\n data: [0, i.amount]\r\n })),\r\n ]\r\n };\r\n}","import React, { useState, useMemo, useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { makeStyles, CardContent, Grid, TextField, MenuItem } from '@material-ui/core';\r\nimport CollapsibleCard from './CollapsibleCard';\r\nimport ReactEcharts from 'echarts-for-react';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n '& .MuiSelect-root .currency-flag': {\r\n display: 'none'\r\n }\r\n },\r\n chart: {\r\n width: '100%',\r\n height: '300px !important'\r\n },\r\n currencySelect: {\r\n width: '100%',\r\n '& .MuiInput-formControl': {\r\n marginTop: 0\r\n }\r\n },\r\n option: {\r\n '& > .currency-flag': {\r\n marginRight: 10\r\n }\r\n }\r\n});\r\n\r\nconst AnalyticsCard = ({ accounts, currencies }) => {\r\n const styles = useStyles();\r\n const [data, setData] = useState([]);\r\n const [selectedId, setId] = useState('AccountsTotalInUSD');\r\n const selectedItem = useMemo(() => data.find(item => item.id === selectedId), [data, selectedId]);\r\n const selectedCurrency = useMemo(() => selectedItem && (currencies.find(c => c.code === selectedItem.id) || { code: 'USD' }), [currencies, selectedItem]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setData(await api.getProgressInfo());\r\n })();\r\n }, [accounts]);\r\n\r\n const handleChange = useCallback(e => setId(e.target.value), []);\r\n\r\n return (\r\n \r\n {data.length !== 0 && data[0].categories[0].data.length > 1 && (\r\n \r\n {accounts.length > 1 && (\r\n \r\n \r\n {data.map(r => (\r\n \r\n {(() => {\r\n const currency = currencies.find(c => c.code === r.id);\r\n return (\r\n <>\r\n \r\n {(currency && currency.code) || 'Accounts total amount in USD'}\r\n \r\n );\r\n })()}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts }, currencies }) => ({ accounts, currencies }))(AnalyticsCard);\r\n\r\nfunction createOption(option, currencyCode) {\r\n return {\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: `Week {b}
{a0}: {c0} ${getCurrencySymbol(currencyCode)}
{a1}: {c1} ${getCurrencySymbol(currencyCode)}
{a2}: {c2} ${getCurrencySymbol(currencyCode)}`\r\n },\r\n legend: {\r\n bottom: 0,\r\n data: option.categories.map(i => i.category)\r\n },\r\n grid: {\r\n top: 20,\r\n left: '3%',\r\n right: '3%',\r\n bottom: 40,\r\n containLabel: true\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: option.categories[0].data.map(i => i.week)\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLabel: {\r\n formatter: `{value} ${getCurrencySymbol(currencyCode)}`\r\n }\r\n },\r\n series: option.categories.map(i => ({\r\n name: i.category,\r\n type: 'line',\r\n data: i.data.map(d => d.amount)\r\n }))\r\n };\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { CardContent, Table, TableHead, TableRow, TableBody, TableCell } from '@material-ui/core';\r\nimport CollapsibleCard from './CollapsibleCard';\r\nimport { Amount, CurrencyTableCell } from 'components/primitives';\r\n\r\nconst ExchangeRatesCard = ({ accounts }) => {\r\n const [exchangeRates, setExchangeRates] = useState();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setExchangeRates(await api.getExchangeRates());\r\n })();\r\n }, [accounts.length]);\r\n\r\n if (!exchangeRates)\r\n return null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Currency\r\n Buy\r\n Sell\r\n \r\n \r\n \r\n {exchangeRates.map(rate => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts } }) => ({ accounts }))(ExchangeRatesCard);","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Dialog, DialogTitle, DialogContent,\r\n DialogContentText, TextField, DialogActions,\r\n Button, CardActions, FormControl,\r\n RadioGroup, FormControlLabel, Radio,\r\n Checkbox, FormHelperText, Paper,\r\n Tabs, Tab, Box\r\n} from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { onUserReceived, showSnackbarMessage, depositOptionsReceived } from 'behavior';\r\nimport api from 'utils/api';\r\nimport { useFormik } from 'formik';\r\nimport { Amount } from 'components/primitives';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\n\r\nconst OpenDepositSection = ({ defaultCurrency, accounts, depositOptions, onUserReceived, showSnackbarMessage, depositOptionsReceived }) => {\r\n const [currency, setCurrency] = useState(defaultCurrency);\r\n const handleCurrencyChange = (_, newCurrency) => {\r\n setCurrency(newCurrency);\r\n formik.resetForm();\r\n }\r\n\r\n useEffect(() => {\r\n if (depositOptions.length)\r\n return;\r\n\r\n api.getDepositOptions().then(result => depositOptionsReceived(result));\r\n }, [depositOptions, depositOptionsReceived]);\r\n\r\n const optionsToShow = depositOptions.filter(o => o.currency === currency);\r\n const [depositing, setDepositing] = useState(false);\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n amount: '',\r\n depositOption: '0',\r\n shouldCapitalize: false,\r\n closable: false,\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.amount)\r\n errors.amount = 'Amount is required.';\r\n\r\n else if (Number.isNaN(Number(values.amount)))\r\n errors.amount = 'Amount must be a number.';\r\n\r\n else {\r\n const accountAmount = accounts.find(a => a.currency === currency).value\r\n if (values.amount > accountAmount)\r\n errors.amount = <>You cannot open deposit with amount bigger than your current balance of .;\r\n }\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ amount, shouldCapitalize, closable, depositOption }) => {\r\n const deposit = optionsToShow[depositOption];\r\n\r\n api.deposit(deposit.id, closable, parseFloat(amount), shouldCapitalize).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>Deposit {deposit.title} is opened with balance of )\r\n closeDialog();\r\n })\r\n }\r\n });\r\n\r\n if (!depositOptions.length)\r\n return null;\r\n\r\n const closeDialog = () => {\r\n setDepositing(false);\r\n setCurrency(defaultCurrency);\r\n formik.resetForm();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n Deposit\r\n \r\n {accounts.length > 1 && (\r\n \r\n \r\n {accounts.map(a => a.currency).map(c => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n {!optionsToShow.length && 'No deposit options available for selected currency!'}\r\n {optionsToShow.length !== 0 && (\r\n <>\r\n Select options most comfortable for you.\r\n \r\n \r\n \r\n {optionsToShow.map(({ id, title, percentage, closablePercentage }, index) => (\r\n }\r\n label={title + ` - ${percentage}% (${closablePercentage}%*) per year, monthly interest.`}\r\n />\r\n ))}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n }\r\n label=\"Include capitalization\"\r\n />\r\n In case this option is turned on your interest will be added to the deposit balance instead of your main balance.\r\n \r\n }\r\n label=\"*Flexible\"\r\n />\r\n In case this option is selected deposit will be closable before due date. Interest percentage is lower in this case, which is mentioned in ().\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default connect(\r\n ({ user: { defaultCurrency, accounts }, depositOptions }) => ({ defaultCurrency, accounts, depositOptions }),\r\n { onUserReceived, showSnackbarMessage, depositOptionsReceived },\r\n)(OpenDepositSection);","import React from 'react';\r\nimport { Typography, withStyles, LinearProgress, lighten } from '@material-ui/core';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst BorderLinearProgress = withStyles({\r\n root: {\r\n height: 10,\r\n backgroundColor: lighten('#4caf50', 0.5),\r\n },\r\n bar: {\r\n borderRadius: 20,\r\n backgroundColor: '#4caf50',\r\n },\r\n})(LinearProgress);\r\n\r\nexport default function BasicDepositInfo({ currentWeek, percentage, balance, shouldCapitalize, durationInMonths, startWeek }) {\r\n return (\r\n \r\n Balance:
\r\n Percentage: {percentage + '%'}
\r\n {shouldCapitalize && (\r\n <>\r\n Capitalization: included
\r\n \r\n )}\r\n Progress:\r\n \r\n
\r\n );\r\n};","import React from 'react';\r\nimport { makeStyles, Dialog, DialogTitle, DialogContent, FormControl, TextField, DialogActions, Button, Typography } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { onUserReceived, showSnackbarMessage, resetDepositOptions } from 'behavior';\r\nimport api from 'utils/api';\r\nimport { useFormik } from 'formik';\r\nimport { Amount } from 'components/primitives';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\nimport BasicDepositInfo from './BasicDepositInfo';\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n marginTop: 20,\r\n minWidth: 350,\r\n },\r\n});\r\n\r\nconst DetailsPopup = ({\r\n accountBalance,\r\n isOpen,\r\n onClose,\r\n deposit,\r\n currentWeek,\r\n onUserReceived,\r\n showSnackbarMessage,\r\n resetDepositOptions,\r\n}) => {\r\n const styles = useStyles();\r\n const { id: depositId, title, balance: { value, currency }, closable } = deposit;\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n amount: '',\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.amount || values.amount < 0)\r\n errors.amount = 'Amount is required.';\r\n\r\n else if (Number.isNaN(Number(values.amount)))\r\n errors.amount = 'Amount must be a number.';\r\n\r\n else if (values.amount > accountBalance)\r\n errors.amount = <>You cannot open deposit with amount bigger than your current balance of .;\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ amount }) => api.addToDeposit(depositId, parseFloat(amount)).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<> is added to Deposit {title} in {currency} {getCurrencySymbol(currency)})\r\n closeDialog();\r\n })\r\n });\r\n\r\n const closeDialog = () => {\r\n onClose()\r\n formik.resetForm();\r\n };\r\n\r\n const closeDeposit = () => api.closeDeposit(depositId, currency).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(\r\n <>\r\n Deposit {title} in {currency} {getCurrencySymbol(currency)} has been closed.\r\n is added to the current account.\r\n \r\n );\r\n closeDialog();\r\n resetDepositOptions();\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n Deposit {title} in {currency} {getCurrencySymbol(currency)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {closable && }\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default connect(\r\n ({ user: { accounts, currentWeek } }, { deposit }) => ({ accountBalance: accounts.find(a => a.currency === deposit.balance.currency).value, currentWeek }),\r\n { onUserReceived, showSnackbarMessage, resetDepositOptions }\r\n)(DetailsPopup);","import React, { useState, useRef, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { onUserReceived, resetDepositOptions } from 'behavior';\r\nimport {\r\n CardContent,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport OpenDepositSection from './OpenDepositSection';\r\nimport { AccountBalance } from '@material-ui/icons';\r\nimport BasicDepositInfo from './BasicDepositInfo';\r\nimport DetailsPopup from './DetailsPopup';\r\n\r\nconst DepositInfoCard = ({ deposits, currentWeek, resetDepositOptions }) => {\r\n const hasDeposits = !!deposits.length;\r\n const [openDetails, setOpenDetails] = useState(false);\r\n const selectedDeposit = useRef();\r\n\r\n useEffect(() => {\r\n resetDepositOptions();\r\n }, [deposits.length, resetDepositOptions]);\r\n\r\n return (\r\n \r\n \r\n \r\n {!hasDeposits && (\r\n \r\n No open deposits\r\n To start depositing press 'Open deposit' button below!\r\n \r\n )}\r\n {hasDeposits && (\r\n \r\n {deposits.map(deposit => (\r\n (selectedDeposit.current = deposit) & setOpenDetails(true)}>\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n \r\n {selectedDeposit.current && setOpenDetails(false)} deposit={selectedDeposit.current} />}\r\n \r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { deposits, currentWeek } }) => ({ deposits, currentWeek }),\r\n { onUserReceived, resetDepositOptions },\r\n)(DepositInfoCard);","import React from 'react';\r\nimport { Typography, withStyles, LinearProgress, lighten } from '@material-ui/core';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst BorderLinearProgress = withStyles({\r\n root: {\r\n height: 10,\r\n backgroundColor: lighten('#ff6c5c', 0.5),\r\n },\r\n bar: {\r\n borderRadius: 20,\r\n backgroundColor: '#ff6c5c',\r\n },\r\n})(LinearProgress);\r\n\r\nexport default function BasicCreditInfo({ currentWeek, percentage, totalAmount, durationInMonths, startWeek }) {\r\n return (\r\n \r\n Total amount:
\r\n Percentage: {percentage + '%'}
\r\n Total duration: {durationInMonths} month(s)
\r\n Progress:\r\n \r\n
\r\n );\r\n};","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Dialog, DialogTitle, DialogContent,\r\n DialogContentText, TextField, DialogActions,\r\n Button, CardActions, FormControl,\r\n makeStyles, MenuItem,\r\n} from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport api from 'utils/api';\r\nimport { useFormik } from 'formik';\r\nimport { Amount } from 'components/primitives';\r\nimport getCurrencySymbol from 'currency-symbol-map';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n formControl: {\r\n display: 'inline-block',\r\n marginRight: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst OpenCreditSection = ({ defaultCurrency, accounts, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n\r\n const defaultAccountBalance = accounts.find(a => a.currency === defaultCurrency).value;\r\n const isEmergency = defaultAccountBalance < 0;\r\n const creditTitle = `${isEmergency ? 'Emergency ' : ''}Credit`;\r\n const [crediting, setCrediting] = useState(false);\r\n const percentage = isEmergency ? 29 : 21;\r\n\r\n useEffect(() => {\r\n if (defaultAccountBalance < 0)\r\n setCrediting(true);\r\n }, [defaultAccountBalance]);\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n amount: '',\r\n duration: 1,\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.amount || values.amount < 0)\r\n errors.amount = 'Amount is required.';\r\n else if (Number.isNaN(Number(values.amount)))\r\n errors.amount = 'Amount must be a number.';\r\n else if (isEmergency && values.amount < -defaultAccountBalance)\r\n errors.amount = <>Emergency credit should make non-negative balance of .;\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ amount, duration }) => {\r\n api.openCredit(creditTitle, parseFloat(amount), parseInt(duration), parseFloat(percentage)).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>Credit is taken with amount of )\r\n closeDialog();\r\n })\r\n }\r\n });\r\n\r\n const closeDialog = () => {\r\n setCrediting(false);\r\n formik.resetForm();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n {creditTitle}\r\n \r\n \r\n {isEmergency && 'The balance on your current account is negative! In order to continue make sure your balance is non-negative or take emergency credit.'}\r\n Credit percentage is fixed and equals to {percentage}% per year and taken on annuity basis.\r\n \r\n \r\n \r\n \r\n \r\n \r\n {[1, 3, 6, 12].map(d => (\r\n {d} month(s)\r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default connect(\r\n ({ user: { accounts, defaultCurrency } }) => ({ accounts, defaultCurrency }),\r\n { onUserReceived, showSnackbarMessage },\r\n)(OpenCreditSection);","import React from 'react';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport { CardContent, List, ListItem, ListItemIcon, ListItemText } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { onUserReceived } from 'behavior';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport { CardMembership } from '@material-ui/icons';\r\nimport BasicCreditInfo from './BasicCreditInfo';\r\nimport OpenCreditSection from './OpenCreditSection';\r\n\r\nconst CreditInfoCard = ({ credits, currentWeek }) => {\r\n const hasCredits = !!credits.length;\r\n return (\r\n \r\n \r\n {!hasCredits && (\r\n \r\n No open credits.\r\n You are doing well!\r\n \r\n )}\r\n {hasCredits && (\r\n \r\n {credits.map((credit, index) => (\r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default connect(({ user: { credits, currentWeek } }) => ({ credits, currentWeek }), { onUserReceived })(CreditInfoCard);","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport {\r\n Button, Dialog, DialogTitle, DialogContent, DialogActions, Table, TableHead, TableBody, TableRow, TableCell,\r\n Grid, FormControl, TextField\r\n} from '@material-ui/core';\r\nimport { Amount, CurrencyTableCell } from 'components/primitives';\r\n\r\nconst TransactionsDialog = ({ currentWeek, open, onClose }) => {\r\n const [transactions, setTransactions] = useState();\r\n const [startWeek, setStartWeek] = useState();\r\n const [endWeek, setEndWeek] = useState();\r\n\r\n useEffect(() => {\r\n open && (async () => {\r\n const startWeek = currentWeek - 3 > 0 ? currentWeek - 3 : 1;\r\n const endWeek = currentWeek;\r\n setStartWeek(startWeek);\r\n setEndWeek(endWeek);\r\n setTransactions(await api.getTransactions({ startWeek, endWeek }));\r\n })();\r\n }, [open]);\r\n\r\n const handleStartWeekChange = async e => {\r\n const startWeek = e.target.value;\r\n setStartWeek(startWeek);\r\n setTransactions(await api.getTransactions({ startWeek, endWeek }))\r\n };\r\n\r\n const handleEndWeekChange = async e => {\r\n const endWeek = e.target.value;\r\n setEndWeek(endWeek);\r\n setTransactions(await api.getTransactions({ startWeek, endWeek }))\r\n };\r\n\r\n if (!transactions)\r\n return null;\r\n\r\n return (\r\n \r\n Transactions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Currency\r\n Operation\r\n Amount\r\n Balance\r\n \r\n \r\n \r\n {transactions.map((item, index) => (\r\n \r\n \r\n {item.operationTitle}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { currentWeek } }) => ({ currentWeek }))(TransactionsDialog);","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { CardContent, CardActions, Table, TableHead, TableBody, TableRow, TableCell, Button } from '@material-ui/core';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport { Amount, CurrencyTableCell } from 'components/primitives';\r\nimport TransactionsDialog from './TransactionsDialog';\r\n\r\nconst TransactionsCard = ({ accounts }) => {\r\n const [transactions, setTransactions] = useState();\r\n const [transactionsDialogOpen, setTransactionsDialogOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setTransactions(await api.getTransactions({ count: 5 }));\r\n })();\r\n }, [accounts]);\r\n\r\n return (\r\n \r\n {transactions && (\r\n <>\r\n \r\n \r\n \r\n \r\n Currency\r\n Operation\r\n Amount\r\n Balance\r\n \r\n \r\n \r\n {transactions.map((item, index) => (\r\n \r\n \r\n {item.operationTitle}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts } }) => ({ accounts }))(TransactionsCard);","import React, { useMemo, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, showSnackbarMessage } from 'behavior';\r\nimport {\r\n makeStyles, Typography, Button, Dialog, DialogActions, Card, CardMedia, CardContent\r\n} from '@material-ui/core';\r\nimport { Alert } from '@material-ui/lab';\r\nimport { Amount } from 'components/primitives';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n maxWidth: 350\r\n },\r\n media: {\r\n height: 200\r\n },\r\n alert: {\r\n marginTop: 20\r\n },\r\n infoItem: {\r\n marginTop: 10\r\n }\r\n});\r\n\r\nconst NonFinancialInvestmentDialog = ({ item, open, onClose, accounts, onUserReceived, showSnackbarMessage }) => {\r\n const styles = useStyles();\r\n const accountValue = useMemo(() => accounts.find(({ currency }) => currency === item.price.currency)?.value, [item, accounts]);\r\n\r\n const handleBuy = useCallback(() => api.buyNonFinancialInvestment(item.id).then(data => {\r\n onUserReceived(data);\r\n showSnackbarMessage(<>You spent to buy '{item.title}'.);\r\n onClose();\r\n }), [item, onUserReceived, showSnackbarMessage, onClose]);\r\n\r\n return (\r\n \r\n \r\n {item.image && }\r\n \r\n {item.title}\r\n {item.description}\r\n \r\n
You can buy it for .
\r\n
\r\n This investment will be automatically sold after buying in {item.willBeSoldAfterBuyingInWeeks.from} - {item.willBeSoldAfterBuyingInWeeks.to} weeks.\r\n
\r\n
Your possible income will be from {item.possibleIncome.from * 100}% to {item.possibleIncome.to * 100}%.
\r\n
\r\n {accountValue === undefined && (\r\n \r\n You don't have current account in {item.price.currency}.\r\n \r\n )}\r\n {accountValue < item.price.value && (\r\n \r\n You don't have enough money on your current account.\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n Buy it\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(({ user: { accounts } }) => ({ accounts }), { onUserReceived, showSnackbarMessage })(NonFinancialInvestmentDialog);","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { CardContent, Table, TableRow, TableBody, TableCell, Button } from '@material-ui/core';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport CollapsibleCard from '../CollapsibleCard';\r\nimport NonFinancialInvestmentDialog from './NonFinancialInvestmentDialog';\r\n\r\nconst NonFinancialInvestmentsCard = ({ nonFinancialInvestments, currentWeek }) => {\r\n const [items, setItems] = useState();\r\n const [availableItems, setAvailableItems] = useState();\r\n const [dialogOpen, setDialogOpen] = useState(false);\r\n const [selectedItem, setSelectedItem] = useState();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n setItems(await api.getNonFinancialInvestments());\r\n })();\r\n }, []);\r\n\r\n useEffect(() => {\r\n items && setAvailableItems(items.filter(({ id, availableInWeeks: { from, to } }) => !nonFinancialInvestments.map(({ id }) => id).includes(id) && from <= currentWeek && currentWeek <= to));\r\n }, [items, currentWeek, nonFinancialInvestments]);\r\n\r\n const handleItemSelect = useCallback(item => {\r\n setSelectedItem(item);\r\n setDialogOpen(true);\r\n }, []);\r\n\r\n if (!availableItems)\r\n return null;\r\n\r\n return (\r\n \r\n \r\n {!availableItems.length\r\n ? (\r\n \r\n No options available for now.\r\n \r\n )\r\n : (\r\n \r\n \r\n {availableItems.map(item => (\r\n \r\n {item.title}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n )}\r\n
\r\n {selectedItem && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n ({ user: { nonFinancialInvestments, currentWeek } }) => ({ nonFinancialInvestments, currentWeek })\r\n)(NonFinancialInvestmentsCard);","import React from 'react';\r\nimport { Grid } from '@material-ui/core';\r\nimport SnackbarAlert from './SnackbarAlert';\r\nimport { UserEventHandler } from './events';\r\nimport { UserQuizHandler } from './quizzes';\r\nimport { UserReportHandler } from './report';\r\nimport CurrentAccountCard from './cards/currentAccount/CurrentAccountCard';\r\nimport SavingsCard from './cards/savings/SavingsCard';\r\nimport WeekUpdateCard from './cards/WeekUpdateCard';\r\nimport AnalyticsCard from './cards/AnalyticsCard';\r\nimport ExchangeRatesCard from './cards/ExchangeRatesCard';\r\nimport DepositInfoCard from './cards/deposit/DepositInfoCard';\r\nimport CreditInfoCard from './cards/credits/CreditInfoCard';\r\nimport TransactionsCard from './cards/transactions/TransactionsCard';\r\nimport NonFinancialInvestmentsCard from './cards/nonFinancialInvestments/NonFinancialInvestmentsCard';\r\n\r\nconst Game = () => (\r\n <>\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default Game;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nexport default () => (\r\n \r\n Welcome to Personal Finance\r\n \r\n);","import React, { useState, useEffect } from 'react';\r\nimport { useFormik } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { onUserReceived } from 'behavior';\r\nimport {\r\n makeStyles, Typography, Grid, FormControl, FormControlLabel,\r\n TextField, Switch, MenuItem, Button, FormHelperText,\r\n} from '@material-ui/core';\r\nimport { CurrencyAutocomplete, CountryAutocomplete } from 'components/primitives';\r\nimport Header from './Header';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n formControl: {\r\n margin: `${theme.spacing(1)}px 0`,\r\n minWidth: 350,\r\n },\r\n description: {\r\n marginTop: theme.spacing(1),\r\n },\r\n buttonContainer: {\r\n margin: `${theme.spacing(3)}px 0`,\r\n },\r\n}));\r\n\r\nconst defaults = ['10000/6000', '15000/9000', '30000/15000', '100000/30000'];\r\n\r\nconst GameStart = ({ locationInfo, countries, currencies, onUserReceived }) => {\r\n const styles = useStyles();\r\n const [showSalarySpendingDropdown, toggleSalarySpendingDropdown] = useState();\r\n\r\n const { countryCode: country, currency } = locationInfo;\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n country,\r\n currency,\r\n salarySpending: '',\r\n customSalary: '',\r\n customSpending: '',\r\n assessmentEnabled: true,\r\n },\r\n validate: values => {\r\n const errors = {};\r\n\r\n if (!values.country)\r\n errors.country = 'Country is required.';\r\n\r\n if (!values.currency)\r\n errors.currency = 'Currency is required.';\r\n\r\n if (values.salarySpending !== 'custom')\r\n return errors;\r\n\r\n if (values.customSalary === '' || values.customSalary < 0)\r\n errors.customSalary = 'Salary is required.';\r\n\r\n else if (Number.isNaN(Number(values.customSalary)))\r\n errors.customSalary = 'Salary must be a number.';\r\n\r\n if (values.customSpending === '' || values.customSpending < 0)\r\n errors.customSpending = 'Spending is required.';\r\n\r\n else if (Number.isNaN(Number(values.customSpending)))\r\n errors.customSpending = 'Spending must be a number.';\r\n\r\n return errors;\r\n },\r\n onSubmit: ({ country, currency, salarySpending, customSalary, customSpending, assessmentEnabled }) => {\r\n const parts = salarySpending.split('/');\r\n const salary = parseFloat(salarySpending === 'custom' ? customSalary : parts[0]);\r\n const spending = parseFloat(salarySpending === 'custom' ? customSpending : parts[1]);\r\n\r\n api.startGame({ country, currency, salary, spending, assessmentEnabled }).then(data => onUserReceived(data));\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (formik.values.currency === 'UAH') {\r\n toggleSalarySpendingDropdown(true);\r\n formik.setFieldValue('salarySpending', defaults[0]);\r\n } else {\r\n toggleSalarySpendingDropdown(false);\r\n formik.setFieldValue('salarySpending', 'custom');\r\n }\r\n }, [formik.values.currency]);\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n To start simulation select your country, default currency and your month salary/spending.\r\n \r\n \r\n \r\n \r\n c.code === formik.values.country)}\r\n options={countries}\r\n onChange={value => formik.setFieldValue('country', value)}\r\n onBlur={() => formik.setFieldTouched('country', true)}\r\n error={formik.touched.country && !!formik.errors.country}\r\n helperText={formik.touched.country && formik.errors.country}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n c.code === formik.values.currency)}\r\n options={currencies}\r\n onChange={value => formik.setFieldValue('currency', value)}\r\n onBlur={() => formik.setFieldTouched('currency', true)}\r\n error={formik.touched.currency && !!formik.errors.currency}\r\n helperText={formik.touched.currency && formik.errors.currency}\r\n />\r\n \r\n \r\n \r\n \r\n {showSalarySpendingDropdown && (\r\n \r\n \r\n \r\n {defaults.map(s => {s})}\r\n Other\r\n \r\n \r\n \r\n )}\r\n {formik.values.salarySpending === 'custom' && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n }\r\n label=\"Enable assessment\"\r\n />\r\n \r\n *Enabling assessments will allow you to check the list of completed and uncompleted estimation tasks by different categories after 6 months of simulation.\r\n
\r\n After that you'll still be able to complete assessments.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default connect(({ countries, currencies }) => ({ countries, currencies }), { onUserReceived })(GameStart);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport api from 'utils/api';\r\nimport { onUserReceived, receiveCountries, receiveCurrencies, receiveAssessmentConfigurations } from 'behavior';\r\nimport Game from './Game';\r\nimport GameStart from './GameStart';\r\n\r\nconst Home = ({\r\n userLoaded,\r\n gameStarted,\r\n assessmentEnabled,\r\n sync,\r\n countries,\r\n currencies,\r\n assessmentConfigurations,\r\n onUserReceived,\r\n receiveCountries,\r\n receiveCurrencies,\r\n receiveAssessmentConfigurations\r\n}) => {\r\n const [locationInfo, setLocationInfo] = useState();\r\n\r\n useEffect(() => {\r\n (async () => {\r\n onUserReceived(await api.getUserInfo());\r\n })();\r\n }, [sync]);\r\n\r\n useEffect(() => {\r\n (async () => {\r\n receiveCountries(await api.getCountries());\r\n receiveCurrencies(await api.getCurrencies());\r\n receiveAssessmentConfigurations(await api.getAssessmentConfigurations());\r\n })();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (userLoaded && !gameStarted)\r\n api.getLocationInfo().then(setLocationInfo);\r\n }, [userLoaded, gameStarted]);\r\n\r\n if (!userLoaded || !countries.length || !currencies.length || (!gameStarted && locationInfo == null))\r\n return null;\r\n\r\n if (gameStarted && assessmentEnabled && !assessmentConfigurations.length)\r\n return null;\r\n\r\n return gameStarted ? : ;\r\n};\r\n\r\nexport default connect(\r\n ({\r\n user: { loaded, gameStarted, assessmentEnabled, sync },\r\n countries,\r\n currencies,\r\n assessmentConfigurations\r\n }) => ({\r\n userLoaded: loaded,\r\n gameStarted,\r\n assessmentEnabled,\r\n sync,\r\n countries,\r\n currencies,\r\n assessmentConfigurations\r\n }),\r\n { onUserReceived, receiveCountries, receiveCurrencies, receiveAssessmentConfigurations }\r\n)(Home);","import 'typeface-roboto';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { Router } from 'react-router-dom';\r\nimport { createBrowserHistory } from 'history';\r\nimport configureStore from './utils/configureStore';\r\nimport App from './App';\r\n\r\n// Create browser history to use in the Redux store\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst history = createBrowserHistory({ basename: baseUrl });\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nconst initialState = window.initialReduxState;\r\nconst store = configureStore(history, initialState);\r\n\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement);\r\n","import { applyMiddleware, compose, createStore } from 'redux';\r\nimport { routerMiddleware } from 'react-router-redux';\r\nimport { rootReducer } from 'behavior/rootReducer';\r\n\r\nexport default function configureStore(history, initialState) {\r\n const middleware = [\r\n routerMiddleware(history)\r\n ];\r\n\r\n // In development, use the browser's Redux dev tools extension if installed\r\n const enhancers = [];\r\n const isDevelopment = process.env.NODE_ENV === 'development';\r\n if (isDevelopment && typeof window !== 'undefined' && window.devToolsExtension) {\r\n enhancers.push(window.devToolsExtension());\r\n }\r\n\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n compose(applyMiddleware(...middleware), ...enhancers)\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Route } from 'react-router';\r\nimport Layout from './components/Layout';\r\nimport Home from './components/Home';\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n);"],"sourceRoot":""}