feat: add minimumTx boundaries based on config fiat currency

This commit is contained in:
Sérgio Salgado 2021-06-22 22:05:28 +01:00 committed by Josh Harvey
parent ac61601397
commit ee330cd925
5 changed files with 60 additions and 45 deletions

View file

@ -6,7 +6,7 @@ import Section from 'src/components/layout/Section'
import {
mainFields,
overrides,
schema,
getSchema,
getOverridesSchema,
defaults,
overridesDefaults,
@ -41,9 +41,9 @@ const CommissionsDetails = memo(
enableEdit
initialValues={commission}
save={save}
validationSchema={schema}
validationSchema={getSchema(locale)}
data={R.of(commission)}
elements={mainFields(currency, locale, classes)}
elements={mainFields(currency)}
setEditing={onEditingDefault}
forceDisable={isEditingOverrides}
/>
@ -62,16 +62,11 @@ const CommissionsDetails = memo(
save={saveOverrides}
validationSchema={getOverridesSchema(
orderedCommissionsOverrides,
data
data,
locale
)}
data={orderedCommissionsOverrides}
elements={overrides(
data,
currency,
orderedCommissionsOverrides,
locale,
classes
)}
elements={overrides(data, currency, orderedCommissionsOverrides)}
setEditing={onEditingOverrides}
forceDisable={isEditingDefault}
/>

View file

@ -169,7 +169,7 @@ const CommissionsList = memo(
enableEdit
save={saveOverrides}
initialValues={overridesDefaults}
validationSchema={getListCommissionsSchema()}
validationSchema={getListCommissionsSchema(localeConfig)}
data={tableData}
elements={commissionsList(data, currency)}
/>

View file

@ -9,6 +9,8 @@ import { bold } from 'src/styling/helpers'
import { ReactComponent as TxInIcon } from 'src/styling/icons/direction/cash-in.svg'
import { ReactComponent as TxOutIcon } from 'src/styling/icons/direction/cash-out.svg'
import { primaryColor, secondaryColorDark } from 'src/styling/variables'
import denominations from 'src/utils/bill-denominations'
import { getBillOptions } from 'src/utils/bill-options'
import { CURRENCY_MAX } from 'src/utils/constants'
const ALL_MACHINES = {
@ -227,28 +229,35 @@ const overrides = (auxData, currency, auxElements) => {
}
const percentMax = 100
const schema = Yup.object().shape({
cashIn: Yup.number()
.label('Cash-in')
.min(0)
.max(percentMax)
.required(),
cashOut: Yup.number()
.label('Cash-out')
.min(0)
.max(percentMax)
.required(),
fixedFee: Yup.number()
.label('Fixed Fee')
.min(0)
.max(CURRENCY_MAX)
.required(),
minimumTx: Yup.number()
.label('Minimum Tx')
.min(0)
.max(CURRENCY_MAX)
.required()
})
const getSchema = locale => {
const bills = getBillOptions(locale, denominations).map(it =>
parseInt(it.code)
)
const highestBill = R.isEmpty(bills) ? CURRENCY_MAX : Math.max(...bills)
return Yup.object().shape({
cashIn: Yup.number()
.label('Cash-in')
.min(0)
.max(percentMax)
.required(),
cashOut: Yup.number()
.label('Cash-out')
.min(0)
.max(percentMax)
.required(),
fixedFee: Yup.number()
.label('Fixed Fee')
.min(0)
.max(highestBill)
.required(),
minimumTx: Yup.number()
.label('Minimum Tx')
.min(0)
.max(highestBill)
.required()
})
}
const getAlreadyUsed = (id, machine, values) => {
const getCrypto = R.prop('cryptoCurrencies')
@ -271,7 +280,7 @@ const getAlreadyUsed = (id, machine, values) => {
return R.difference(alreadyUsed, originalCryptos)
}
const getOverridesSchema = (values, rawData) => {
const getOverridesSchema = (values, rawData, locale) => {
const getData = R.path(R.__, rawData)
const machineData = [ALL_MACHINES].concat(getData(['machines']))
const rawCryptos = getData(['cryptoCurrencies'])
@ -279,6 +288,11 @@ const getOverridesSchema = (values, rawData) => {
R.map(it => ({ display: it.code, code: it.code }))(rawCryptos ?? [])
)
const bills = getBillOptions(locale, denominations).map(it =>
parseInt(it.code)
)
const highestBill = R.isEmpty(bills) ? CURRENCY_MAX : Math.max(...bills)
return Yup.object().shape({
machine: Yup.string()
.nullable()
@ -330,12 +344,12 @@ const getOverridesSchema = (values, rawData) => {
fixedFee: Yup.number()
.label('Fixed Fee')
.min(0)
.max(CURRENCY_MAX)
.max(highestBill)
.required(),
minimumTx: Yup.number()
.label('Minimum Tx')
.min(0)
.max(CURRENCY_MAX)
.max(highestBill)
.required()
})
}
@ -414,7 +428,12 @@ const getCommissions = (cryptoCode, deviceId, config) => {
return createCommissions(cryptoCode, deviceId, true, config)
}
const getListCommissionsSchema = () => {
const getListCommissionsSchema = locale => {
const bills = getBillOptions(locale, denominations).map(it =>
parseInt(it.code)
)
const highestBill = R.isEmpty(bills) ? CURRENCY_MAX : Math.max(...bills)
return Yup.object().shape({
machine: Yup.string()
.label('Machine')
@ -436,12 +455,12 @@ const getListCommissionsSchema = () => {
fixedFee: Yup.number()
.label('Fixed Fee')
.min(0)
.max(CURRENCY_MAX)
.max(highestBill)
.required(),
minimumTx: Yup.number()
.label('Minimum Tx')
.min(0)
.max(CURRENCY_MAX)
.max(highestBill)
.required()
})
}
@ -534,7 +553,7 @@ const getListCommissionsFields = (getData, currency, defaults) => {
export {
mainFields,
overrides,
schema,
getSchema,
getOverridesSchema,
defaults,
overridesDefaults,

View file

@ -8,7 +8,7 @@ import { Table as EditableTable } from 'src/components/editableTable'
import Section from 'src/components/layout/Section'
import TitleSection from 'src/components/layout/TitleSection'
import styles from 'src/pages/AddMachine/styles'
import { mainFields, defaults, schema } from 'src/pages/Commissions/helper'
import { mainFields, defaults, getSchema } from 'src/pages/Commissions/helper'
import { fromNamespace, toNamespace, namespaces } from 'src/utils/config'
const useStyles = makeStyles(styles)
@ -62,7 +62,7 @@ function Commissions({ isActive, doContinue }) {
enableEdit
forceAdd={isActive}
save={save}
validationSchema={schema}
validationSchema={getSchema(locale)}
data={[]}
elements={mainFields(currency, locale, commissionClasses)}
/>

View file

@ -1,7 +1,7 @@
import * as R from 'ramda'
import React from 'react'
import { schema as CommissionsSchema } from 'src/pages/Commissions/helper'
import { getSchema as CommissionsSchema } from 'src/pages/Commissions/helper'
import { LocaleSchema } from 'src/pages/Locales/helper'
import { WalletSchema } from 'src/pages/Wallet/helper'
import { fromNamespace, namespaces } from 'src/utils/config'
@ -40,7 +40,8 @@ const hasValidLocale = config => {
const hasValidCommissions = config => {
const commission = fromNamespace(namespaces.COMMISSIONS, config)
return CommissionsSchema.isValidSync(commission)
const locale = fromNamespace(namespaces.LOCALE, config)
return CommissionsSchema(locale).isValidSync(commission)
}
const getWizardStep = (config, crypto) => {