98 lines
2.1 KiB
JavaScript
98 lines
2.1 KiB
JavaScript
import * as R from 'ramda'
|
|
import * as Yup from 'yup'
|
|
|
|
import { NumberInput } from 'src/components/inputs/formik'
|
|
import { transformNumber } from 'src/utils/number'
|
|
|
|
const currencyMax = 999999999
|
|
const DenominationsSchema = Yup.object().shape({
|
|
cassette1: Yup.number()
|
|
.label('Cassette 1')
|
|
.required()
|
|
.min(1)
|
|
.max(currencyMax),
|
|
cassette2: Yup.number()
|
|
.label('Cassette 2')
|
|
.required()
|
|
.min(1)
|
|
.max(currencyMax),
|
|
cassette3: Yup.number()
|
|
.label('Cassette 3')
|
|
.min(1)
|
|
.max(currencyMax)
|
|
.nullable()
|
|
.transform(transformNumber),
|
|
cassette4: Yup.number()
|
|
.label('Cassette 4')
|
|
.min(1)
|
|
.max(currencyMax)
|
|
.nullable()
|
|
.transform(transformNumber),
|
|
zeroConfLimit: Yup.number()
|
|
.label('0-conf Limit')
|
|
.required()
|
|
.min(0)
|
|
.max(currencyMax)
|
|
})
|
|
|
|
const getElements = (machines, { fiatCurrency } = {}) => {
|
|
const maxNumberOfCassettes = Math.max(
|
|
...R.map(it => it.numberOfCassettes, machines),
|
|
0
|
|
)
|
|
|
|
const elements = [
|
|
{
|
|
name: 'id',
|
|
header: 'Machine',
|
|
width: 200,
|
|
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: (maxNumberOfCassettes > 2 ? 600 : 460) / maxNumberOfCassettes,
|
|
input: NumberInput,
|
|
inputProps: {
|
|
decimalPlaces: 0
|
|
},
|
|
suffix: fiatCurrency,
|
|
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: maxNumberOfCassettes > 2 ? 150 : 290,
|
|
input: NumberInput,
|
|
inputProps: {
|
|
decimalPlaces: 0
|
|
},
|
|
suffix: fiatCurrency
|
|
})
|
|
|
|
return elements
|
|
}
|
|
|
|
export { DenominationsSchema, getElements }
|