lamassu-server/new-lamassu-admin/src/pages/Cashout/helper.js
2022-01-04 14:34:19 +00:00

119 lines
3 KiB
JavaScript

import * as R from 'ramda'
import * as Yup from 'yup'
import { Autocomplete, NumberInput } from 'src/components/inputs/formik'
import { bold } from 'src/styling/helpers'
import denominations from 'src/utils/bill-denominations'
import { getBillOptions } from 'src/utils/bill-options'
import { CURRENCY_MAX } from 'src/utils/constants'
import { transformNumber } from 'src/utils/number'
const widthsByNumberOfCassettes = {
2: { machine: 300, cassette: 225, zeroConf: 200 },
3: { machine: 210, cassette: 180, zeroConf: 200 },
4: { machine: 200, cassette: 150, zeroConf: 150 }
}
const DenominationsSchema = Yup.object().shape({
cassette1: Yup.number()
.label('Cassette 1')
.required()
.min(1)
.max(CURRENCY_MAX),
cassette2: Yup.number()
.label('Cassette 2')
.required()
.min(1)
.max(CURRENCY_MAX),
cassette3: Yup.number()
.label('Cassette 3')
.min(1)
.max(CURRENCY_MAX)
.nullable()
.transform(transformNumber),
cassette4: Yup.number()
.label('Cassette 4')
.min(1)
.max(CURRENCY_MAX)
.nullable()
.transform(transformNumber),
zeroConfLimit: Yup.number()
.label('0-conf Limit')
.required()
.min(0)
.max(CURRENCY_MAX)
})
const getElements = (machines, locale = {}, classes) => {
const fiatCurrency = R.prop('fiatCurrency')(locale)
const maxNumberOfCassettes = Math.max(
...R.map(it => it.numberOfCassettes, machines),
0
)
const options = getBillOptions(locale, denominations)
const cassetteProps =
options?.length > 0
? {
options: options,
labelProp: 'display',
valueProp: 'code',
className: classes.autoComplete
}
: { decimalPlaces: 0 }
const elements = [
{
name: 'id',
header: 'Machine',
width: widthsByNumberOfCassettes[maxNumberOfCassettes].machine,
view: it => machines.find(({ deviceId }) => deviceId === it).name,
size: 'sm',
editable: false
}
]
R.until(
R.gt(R.__, maxNumberOfCassettes),
it => {
elements.push({
name: `cassette${it}`,
header: `Cassette ${it}`,
size: 'sm',
stripe: true,
textAlign: 'right',
width: widthsByNumberOfCassettes[maxNumberOfCassettes].cassette,
suffix: fiatCurrency,
bold: bold,
view: it => it,
input: options?.length > 0 ? Autocomplete : NumberInput,
inputProps: cassetteProps,
doubleHeader: 'Denominations',
isHidden: machine =>
it >
machines.find(({ deviceId }) => deviceId === machine.id)
.numberOfCassettes
})
return R.add(1, it)
},
1
)
elements.push({
name: 'zeroConfLimit',
header: '0-conf Limit',
size: 'sm',
stripe: true,
textAlign: 'right',
width: widthsByNumberOfCassettes[maxNumberOfCassettes].zeroConf,
input: NumberInput,
inputProps: {
decimalPlaces: 0
},
suffix: fiatCurrency
})
return elements
}
export { DenominationsSchema, getElements }