Compare commits

...

1 Commits

Author SHA1 Message Date
gala1234 71ea0b6b5f starting logic 2022-06-09 14:00:15 +02:00
2 changed files with 28 additions and 2 deletions
+1
View File
@@ -26,6 +26,7 @@ export const Bond = () => {
} }
}, [status, checkOwnership]); }, [status, checkOwnership]);
return ( return (
<PageLayout> <PageLayout>
<NymCard title="Bond" subheader="Bond a node or gateway" noPadding> <NymCard title="Bond" subheader="Bond a node or gateway" noPadding>
+27 -2
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useContext } from 'react'; import React, { useEffect, useContext, useState } from 'react';
import { Box, Button, CircularProgress, FormControl, Grid, InputAdornment, TextField } from '@mui/material'; import { Box, Button, CircularProgress, FormControl, Grid, InputAdornment, TextField } from '@mui/material';
import { yupResolver } from '@hookform/resolvers/yup'; import { yupResolver } from '@hookform/resolvers/yup';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
@@ -8,6 +8,7 @@ import { AppContext } from '../../context/main';
import { delegate, majorToMinor, vestingDelegateToMixnode } from '../../requests'; import { delegate, majorToMinor, vestingDelegateToMixnode } from '../../requests';
import { Fee, TokenPoolSelector } from '../../components'; import { Fee, TokenPoolSelector } from '../../components';
import { Console } from '../../utils/console'; import { Console } from '../../utils/console';
import { getMixnodeStakeSaturation } from '../../requests';
type TDelegateForm = { type TDelegateForm = {
identity: string; identity: string;
@@ -41,12 +42,24 @@ export const DelegateForm = ({
resolver: yupResolver(validationSchema), resolver: yupResolver(validationSchema),
}); });
const [saturation, setSaturation] = useState<number>(0);
const { userBalance, currency, clientDetails } = useContext(AppContext); const { userBalance, currency, clientDetails } = useContext(AppContext);
useEffect(() => { useEffect(() => {
reset(); reset();
}, [clientDetails]); }, [clientDetails]);
useEffect(() => {
console.log('saturation', saturation);
}, [saturation]);
const getStakeSaturation = async (mixnodeKey: string) => {
const newSaturation = await getMixnodeStakeSaturation(mixnodeKey);
if (newSaturation) {
setSaturation(Math.round(newSaturation.saturation * 100));
}
};
const onSubmit = async (data: TDelegateForm, cb: (data: TDelegateArgs) => Promise<DelegationResult>) => { const onSubmit = async (data: TDelegateForm, cb: (data: TDelegateArgs) => Promise<DelegationResult>) => {
const amount = await majorToMinor(data.amount); const amount = await majorToMinor(data.amount);
@@ -69,6 +82,15 @@ export const DelegateForm = ({
}); });
}; };
const checkNodeSaturation = (value: string) => {
console.log(value, value.length);
if (value.length === 44) {
getStakeSaturation(value);
} else {
setSaturation(0);
}
};
return ( return (
<FormControl fullWidth> <FormControl fullWidth>
<Box sx={{ p: 3 }}> <Box sx={{ p: 3 }}>
@@ -84,7 +106,10 @@ export const DelegateForm = ({
fullWidth fullWidth
error={!!errors.identity} error={!!errors.identity}
helperText={errors?.identity?.message} helperText={errors?.identity?.message}
onBlur={(e) => checkNodeSaturation(e.target.value)}
onChange={(e) => setSaturation(0)}
/> />
{saturation > 100 && <p>Please choose another node, the selected is oversaturated</p>}
</Grid> </Grid>
{userBalance.originalVesting && ( {userBalance.originalVesting && (
@@ -127,7 +152,7 @@ export const DelegateForm = ({
onClick={handleSubmit((data) => onClick={handleSubmit((data) =>
onSubmit(data, data.tokenPool === 'balance' ? delegate : vestingDelegateToMixnode), onSubmit(data, data.tokenPool === 'balance' ? delegate : vestingDelegateToMixnode),
)} )}
disabled={isSubmitting} disabled={isSubmitting || saturation > 100}
data-testid="delegate-button" data-testid="delegate-button"
variant="contained" variant="contained"
color="primary" color="primary"