From 561532339a52d78cd1147e9328c4f6619806c9ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Oliveira?= Date: Wed, 10 Nov 2021 00:58:19 +0000 Subject: [PATCH] fix: confidence checking ui up to spec --- new-lamassu-admin/src/pages/Wallet/Wallet.js | 6 +- new-lamassu-admin/src/pages/Wallet/Wizard.js | 26 ++++++- .../src/pages/Wallet/WizardStep.js | 70 +++++++++++++++---- .../src/pages/Wallet/WizardStep.styles.js | 10 +++ new-lamassu-admin/src/pages/Wallet/helper.js | 1 + 5 files changed, 96 insertions(+), 17 deletions(-) diff --git a/new-lamassu-admin/src/pages/Wallet/Wallet.js b/new-lamassu-admin/src/pages/Wallet/Wallet.js index f9a3514f..386cc1a6 100644 --- a/new-lamassu-admin/src/pages/Wallet/Wallet.js +++ b/new-lamassu-admin/src/pages/Wallet/Wallet.js @@ -46,6 +46,7 @@ const GET_INFO = gql` } } ` +const LOCALE = 'locale' const Wallet = ({ name: SCREEN_KEY }) => { const [editingSchema, setEditingSchema] = useState(null) @@ -69,8 +70,10 @@ const Wallet = ({ name: SCREEN_KEY }) => { return saveConfig({ variables: { config, accounts } }) } - const config = data?.config && fromNamespace(SCREEN_KEY)(data.config) + const fiatCurrency = + data?.config && fromNamespace(LOCALE)(data.config).fiatCurrency + const config = data?.config && fromNamespace(SCREEN_KEY)(data.config) const accountsConfig = data?.accountsConfig const cryptoCurrencies = data?.cryptoCurrencies ?? [] const accounts = data?.accounts ?? [] @@ -135,6 +138,7 @@ const Wallet = ({ name: SCREEN_KEY }) => { save={save} error={error?.message} cryptoCurrencies={cryptoCurrencies} + fiatCurrency={fiatCurrency} userAccounts={data?.config?.accounts} accounts={accounts} accountsConfig={accountsConfig} diff --git a/new-lamassu-admin/src/pages/Wallet/Wizard.js b/new-lamassu-admin/src/pages/Wallet/Wizard.js index ea8a7c1a..237e278f 100644 --- a/new-lamassu-admin/src/pages/Wallet/Wizard.js +++ b/new-lamassu-admin/src/pages/Wallet/Wizard.js @@ -1,6 +1,7 @@ import { utils as coinUtils } from 'lamassu-coins' import * as R from 'ramda' import React, { useState } from 'react' +import * as Yup from 'yup' import Modal from 'src/components/Modal' import schema from 'src/pages/Services/schemas' @@ -9,7 +10,7 @@ import { toNamespace } from 'src/utils/config' import WizardSplash from './WizardSplash' import WizardStep from './WizardStep' -const LAST_STEP = 4 +const LAST_STEP = 5 const MODAL_WIDTH = 554 const contains = crypto => R.compose(R.contains(crypto), R.prop('cryptos')) @@ -34,7 +35,15 @@ const getItems = (accountsConfig, accounts, type, crypto) => { return { filled, unfilled } } -const Wizard = ({ coin, onClose, accountsConfig, accounts, save, error }) => { +const Wizard = ({ + coin, + onClose, + accountsConfig, + accounts, + fiatCurrency, + save, + error +}) => { const [{ step, config, accountsToSave }, setState] = useState({ step: 0, config: { active: true }, @@ -85,7 +94,16 @@ const Wizard = ({ coin, onClose, accountsConfig, accounts, save, error }) => { case 3: return { type: 'exchange', ...exchanges } case 4: - return { type: 'zeroConf', name: 'zero conf', ...zeroConfs } + return { + type: 'confidenceChecking', + name: 'confidence checking', + schema: Yup.object().shape({ + zeroConfLimit: Yup.number().required() + }), + ...zeroConfs + } + case 5: + return { type: 'zeroConfLimit', name: '0-conf limit', ...zeroConfs } default: return null } @@ -107,6 +125,8 @@ const Wizard = ({ coin, onClose, accountsConfig, accounts, save, error }) => { {step !== 0 && ( { const WizardStep = ({ type, + schema: stepSchema, + coin, name, step, error, lastStep, onContinue, + fiatCurrency, filled, unfilled, getValue @@ -86,21 +91,60 @@ const WizardStep = ({ } return ( <> - {startCase(type)} - + {startCase(displayName)} +

- Select a {displayName} or set up a new one + {step < 4 + ? `Select a ${displayName} or set up a new one` + : `Select ${displayName} for ${coin}`}

- { - dispatch({ type: 'select', selected: it }) - }} - labelClassName={classes.radioLabel} - radioClassName={classes.radio} - /> + {step !== 5 && ( + { + dispatch({ type: 'select', selected: it }) + }} + labelClassName={classes.radioLabel} + radioClassName={classes.radio} + /> + )} + {step === 5 && ( + + {({ values, setFieldValue }) => ( +
+
+ { + dispatch({ + type: 'select', + selected: event.target.value + }) + setFieldValue(event.target.id, event.target.value) + }} + className={classes.zeroConfLimit} + /> + {fiatCurrency} +
+
+ )} +
+ )}
{!R.isEmpty(unfilled) && !R.isNil(unfilled) && ( { }, { name: 'zeroConfLimit', + header: '0-conf Limit', size: 'sm', stripe: true, view: (it, row) =>