From ee330cd9251991cd0122c9e876f8092efe63f900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Tue, 22 Jun 2021 22:05:28 +0100 Subject: [PATCH] feat: add minimumTx boundaries based on config fiat currency --- .../components/CommissionsDetails.js | 17 ++-- .../Commissions/components/CommissionsList.js | 2 +- .../src/pages/Commissions/helper.js | 77 ++++++++++++------- .../pages/Wizard/components/Commissions.js | 4 +- new-lamassu-admin/src/pages/Wizard/helper.js | 5 +- 5 files changed, 60 insertions(+), 45 deletions(-) diff --git a/new-lamassu-admin/src/pages/Commissions/components/CommissionsDetails.js b/new-lamassu-admin/src/pages/Commissions/components/CommissionsDetails.js index 9032f35b..216d3a98 100644 --- a/new-lamassu-admin/src/pages/Commissions/components/CommissionsDetails.js +++ b/new-lamassu-admin/src/pages/Commissions/components/CommissionsDetails.js @@ -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} /> diff --git a/new-lamassu-admin/src/pages/Commissions/components/CommissionsList.js b/new-lamassu-admin/src/pages/Commissions/components/CommissionsList.js index 0310beb4..94437549 100644 --- a/new-lamassu-admin/src/pages/Commissions/components/CommissionsList.js +++ b/new-lamassu-admin/src/pages/Commissions/components/CommissionsList.js @@ -169,7 +169,7 @@ const CommissionsList = memo( enableEdit save={saveOverrides} initialValues={overridesDefaults} - validationSchema={getListCommissionsSchema()} + validationSchema={getListCommissionsSchema(localeConfig)} data={tableData} elements={commissionsList(data, currency)} /> diff --git a/new-lamassu-admin/src/pages/Commissions/helper.js b/new-lamassu-admin/src/pages/Commissions/helper.js index a81fd3f0..cd701004 100644 --- a/new-lamassu-admin/src/pages/Commissions/helper.js +++ b/new-lamassu-admin/src/pages/Commissions/helper.js @@ -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, diff --git a/new-lamassu-admin/src/pages/Wizard/components/Commissions.js b/new-lamassu-admin/src/pages/Wizard/components/Commissions.js index 74596853..ac3f184f 100644 --- a/new-lamassu-admin/src/pages/Wizard/components/Commissions.js +++ b/new-lamassu-admin/src/pages/Wizard/components/Commissions.js @@ -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)} /> diff --git a/new-lamassu-admin/src/pages/Wizard/helper.js b/new-lamassu-admin/src/pages/Wizard/helper.js index 1206c293..d5809259 100644 --- a/new-lamassu-admin/src/pages/Wizard/helper.js +++ b/new-lamassu-admin/src/pages/Wizard/helper.js @@ -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) => {