Prompt user to store token before order making

This commit is contained in:
Reckless_Satoshi 2022-05-03 15:23:27 -07:00
parent 2b44d32b01
commit a4afb81ccc
No known key found for this signature in database
GPG Key ID: 9C4585B561315571
5 changed files with 98 additions and 8 deletions

View File

@ -40,9 +40,9 @@ export default class HomePage extends Component {
<Switch> <Switch>
<Route exact path='/' render={(props) => <UserGenPage {...props} {...this.state} setAppState={this.setAppState}/>}/> <Route exact path='/' render={(props) => <UserGenPage {...props} {...this.state} setAppState={this.setAppState}/>}/>
<Route path='/ref/:refCode' render={(props) => <UserGenPage {...props} {...this.state} setAppState={this.setAppState}/>}/> <Route path='/ref/:refCode' render={(props) => <UserGenPage {...props} {...this.state} setAppState={this.setAppState}/>}/>
<Route path='/make' component={MakerPage}/> <Route path='/make' render={(props) => <MakerPage {...props} {...this.state} setAppState={this.setAppState}/>}/>
<Route path='/book' render={(props) => <BookPage {...props} {...this.state} setAppState={this.setAppState} />}/> <Route path='/book' render={(props) => <BookPage {...props} {...this.state} setAppState={this.setAppState} />}/>
<Route path="/order/:orderId" component={OrderPage}/> <Route path="/order/:orderId" render={(props) => <OrderPage {...props} {...this.state} setAppState={this.setAppState}/>}/>
</Switch> </Switch>
</div> </div>
<div className='bottomBar'> <div className='bottomBar'>

View File

@ -1,6 +1,6 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { withTranslation } from "react-i18next"; import { withTranslation } from "react-i18next";
import { InputAdornment, LinearProgress, Accordion, AccordionDetails, AccordionSummary, Checkbox, Slider, Box, Tab, Tabs, SliderThumb, Tooltip, Paper, Button , Grid, Typography, TextField, Select, FormHelperText, MenuItem, FormControl, Radio, FormControlLabel, RadioGroup} from "@mui/material" import { InputAdornment, LinearProgress, Dialog, IconButton, DialogActions, DialogContent, DialogContentText, DialogTitle, Accordion, AccordionDetails, AccordionSummary, Checkbox, Slider, Box, Tab, Tabs, SliderThumb, Tooltip, Paper, Button , Grid, Typography, TextField, Select, FormHelperText, MenuItem, FormControl, Radio, FormControlLabel, RadioGroup} from "@mui/material"
import { LocalizationProvider, TimePicker} from '@mui/lab'; import { LocalizationProvider, TimePicker} from '@mui/lab';
import DateFnsUtils from "@date-io/date-fns"; import DateFnsUtils from "@date-io/date-fns";
import { Link as LinkRouter } from 'react-router-dom' import { Link as LinkRouter } from 'react-router-dom'
@ -18,6 +18,7 @@ import BuySatsIcon from "./icons/BuySatsIcon";
import BuySatsCheckedIcon from "./icons/BuySatsCheckedIcon"; import BuySatsCheckedIcon from "./icons/BuySatsCheckedIcon";
import SellSatsIcon from "./icons/SellSatsIcon"; import SellSatsIcon from "./icons/SellSatsIcon";
import SellSatsCheckedIcon from "./icons/SellSatsCheckedIcon"; import SellSatsCheckedIcon from "./icons/SellSatsCheckedIcon";
import ContentCopy from "@mui/icons-material/ContentCopy";
import { getCookie } from "../utils/cookies"; import { getCookie } from "../utils/cookies";
import { pn } from "../utils/prettyNumbers"; import { pn } from "../utils/prettyNumbers";
@ -232,6 +233,7 @@ class MakerPage extends Component {
.then((response) => response.json()) .then((response) => response.json())
.then((data) => (this.setState({badRequest:data.bad_request}) .then((data) => (this.setState({badRequest:data.bad_request})
& (data.id ? this.props.history.push('/order/' + data.id) :""))); & (data.id ? this.props.history.push('/order/' + data.id) :"")));
this.setState({openStoreToken:false});
} }
getCurrencyCode(val){ getCurrencyCode(val){
@ -696,6 +698,73 @@ class MakerPage extends Component {
) )
} }
StoreTokenDialog = () =>{
const { t } = this.props;
// If there is a robot cookie, prompt user to store it
// Else, prompt user to generate a robot
if (getCookie("robot_token")){
return(
<Dialog
open={this.state.openStoreToken}
onClose={() => this.setState({openStoreToken:false})}
>
<DialogTitle >
{t("Store your robot token")}
</DialogTitle>
<DialogContent>
<DialogContentText>
{t("You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.")}
</DialogContentText>
<br/>
<Grid align="center">
<TextField
sx={{width:"100%", maxWidth:"550px"}}
disabled
label={t("Back it up!")}
value={getCookie("robot_token") }
variant='filled'
size='small'
InputProps={{
endAdornment:
<Tooltip disableHoverListener enterTouchDelay="0" title={t("Copied!")}>
<IconButton onClick= {()=> (navigator.clipboard.writeText(getCookie("robot_token")) & this.props.setAppState({copiedToken:true}))}>
<ContentCopy color={this.props.copiedToken ? "inherit" : "primary"}/>
</IconButton>
</Tooltip>,
}}
/>
</Grid>
</DialogContent>
<DialogActions>
<Button onClick={() => this.setState({openStoreToken:false})} autoFocus>{t("Go back")}</Button>
<Button onClick={this.handleCreateOfferButtonPressed}>{t("Done")}</Button>
</DialogActions>
</Dialog>
)
}else{
return(
<Dialog
open={this.state.openStoreToken}
onClose={() => this.setState({openStoreToken:false})}
>
<DialogTitle>
{t("You do not have a robot avatar")}
</DialogTitle>
<DialogContent>
<DialogContentText>
{t("You need to generate a robot avatar in order to become an order maker")}
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={() => this.setState({openStoreToken:false})} autoFocus>{t("Go back")}</Button>
<Button onClick={() => this.setState({openStoreToken:false})} to="/" component={LinkRouter}>{t("Generate Robot")}</Button>
</DialogActions>
</Dialog>
)
}
}
makeOrderBox=()=>{ makeOrderBox=()=>{
const [value, setValue] = React.useState(this.state.showAdvanced); const [value, setValue] = React.useState(this.state.showAdvanced);
const { t } = this.props; const { t } = this.props;
@ -732,6 +801,8 @@ class MakerPage extends Component {
ORDER MAKER ORDER MAKER
</Typography> </Typography>
</Grid> */} </Grid> */}
<this.StoreTokenDialog/>
<Grid item xs={12} align="center"> <Grid item xs={12} align="center">
<this.makeOrderBox/> <this.makeOrderBox/>
</Grid> </Grid>
@ -745,10 +816,15 @@ class MakerPage extends Component {
(!this.state.is_explicit & this.state.badPremium != null)) (!this.state.is_explicit & this.state.badPremium != null))
? ?
<Tooltip enterTouchDelay="0" title={t("You must fill the order correctly")}> <Tooltip enterTouchDelay="0" title={t("You must fill the order correctly")}>
<div><Button disabled color="primary" variant="contained" onClick={this.handleCreateOfferButtonPressed}>{t("Create Order")}</Button></div> <div><Button disabled color="primary" variant="contained">{t("Create Order")}</Button></div>
</Tooltip> </Tooltip>
: :
<Button color="primary" variant="contained" onClick={this.handleCreateOfferButtonPressed}>{t("Create Order")}</Button> <Button color="primary"
variant="contained"
onClick={this.props.copiedToken ? this.handleCreateOfferButtonPressed : (() => this.setState({openStoreToken:true}))}
>
{t("Create Order")}
</Button>
} }
</Grid> </Grid>

View File

@ -73,11 +73,14 @@ class UserGenPage extends Component {
avatarLoaded: false, avatarLoaded: false,
}) })
: :
(console.log(token) & this.props.setAppState({ (this.props.setAppState({
nickname: data.nickname, nickname: data.nickname,
token: token, token: token,
avatarLoaded: false, avatarLoaded: false,
})) & writeCookie("robot_token",token)) })) & writeCookie("robot_token",token))
&
// If the robot has been found (recovered) we assume the token is backed up
(data.found ? this.props.setAppState({copiedToken:true}) : null)
}); });
} }

View File

@ -70,6 +70,12 @@
"Must be more than {{min}}%":"Must be more than {{min}}%", "Must be more than {{min}}%":"Must be more than {{min}}%",
"Must be less than {{maxSats}": "Must be less than {{maxSats}}", "Must be less than {{maxSats}": "Must be less than {{maxSats}}",
"Must be more than {{minSats}}": "Must be more than {{minSats}}", "Must be more than {{minSats}}": "Must be more than {{minSats}}",
"Store your robot token":"Store your robot token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.":"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.",
"Done":"Done",
"You do not have a robot avatar":"You do not have a robot avatar",
"You need to generate a robot avatar in order to become an order maker":"You need to generate a robot avatar in order to become an order maker",
"PAYMENT METHODS - autocompletePayments.js": "Payment method strings", "PAYMENT METHODS - autocompletePayments.js": "Payment method strings",
"not specified":"Not specified", "not specified":"Not specified",

View File

@ -70,6 +70,11 @@
"Must be more than {{min}}%":"Debe ser más del {{min}}%", "Must be more than {{min}}%":"Debe ser más del {{min}}%",
"Must be less than {{maxSats}": "Debe ser menos de {{maxSats}}", "Must be less than {{maxSats}": "Debe ser menos de {{maxSats}}",
"Must be more than {{minSats}}": "Debe ser más de {{minSats}}", "Must be more than {{minSats}}": "Debe ser más de {{minSats}}",
"Store your robot token":"Guarda el token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.":"Puede que necesites recuperar tu robot avatar en el futuro: haz una copia de seguridad del token. Puedes simplemente copiarlo en otra aplicación.",
"Done":"Hecho",
"You do not have a robot avatar":"No tienes un avatar robot",
"You need to generate a robot avatar in order to become an order maker":"Necesitas generar un avatar robot antes de crear una orden",
"PAYMENT METHODS - autocompletePayments.js": "Payment method strings", "PAYMENT METHODS - autocompletePayments.js": "Payment method strings",