feat: use numberOfCassettes on cashout wizard

fix: hidden fields showing during editing
This commit is contained in:
Sérgio Salgado 2021-09-02 17:26:50 +01:00
parent 6d6c8adabd
commit 13e6401b22
7 changed files with 120 additions and 144 deletions

View file

@ -6,12 +6,12 @@ import Modal from 'src/components/Modal'
import { Autocomplete } from 'src/components/inputs/formik'
import denominations from 'src/utils/bill-denominations'
import { toNamespace } from 'src/utils/config'
import { transformNumber } from 'src/utils/number'
import WizardSplash from './WizardSplash'
import WizardStep from './WizardStep'
import { DenominationsSchema } from './helper'
const LAST_STEP = 6
const MODAL_WIDTH = 554
const MODAL_HEIGHT = 520
@ -25,6 +25,7 @@ const getOptions = R.curry((locale, denomiations) => {
})
const Wizard = ({ machine, locale, onClose, save, error }) => {
const LAST_STEP = machine.numberOfCassettes + 2
const [{ step, config }, setState] = useState({
step: 0,
config: { active: true }
@ -38,7 +39,10 @@ const Wizard = ({ machine, locale, onClose, save, error }) => {
const onContinue = async it => {
if (isLastStep) {
return save(
toNamespace(machine.deviceId, DenominationsSchema.cast(config))
toNamespace(
machine.deviceId,
DenominationsSchema.cast(config, { assert: false })
)
)
}
@ -50,62 +54,55 @@ const Wizard = ({ machine, locale, onClose, save, error }) => {
})
}
const steps = [
{
type: 'cassette1',
display: 'Cassette 1',
component: Autocomplete,
inputProps: {
options: R.map(it => ({ code: it, display: it }))(options),
labelProp: 'display',
valueProp: 'code'
}
},
{
type: 'cassette2',
display: 'Cassette 2',
component: Autocomplete,
inputProps: {
options: R.map(it => ({ code: it, display: it }))(options),
labelProp: 'display',
valueProp: 'code'
}
},
{
type: 'cassette3',
display: 'Cassette 3',
component: Autocomplete,
inputProps: {
options: R.map(it => ({ code: it, display: it }))(options),
labelProp: 'display',
valueProp: 'code'
}
},
{
type: 'cassette4',
display: 'Cassette 4',
component: Autocomplete,
inputProps: {
options: R.map(it => ({ code: it, display: it }))(options),
labelProp: 'display',
valueProp: 'code'
}
},
{
type: 'zeroConfLimit',
display: '0-conf Limit',
schema: Yup.object().shape({
zeroConfLimit: Yup.number().required()
const steps = []
R.until(
R.gt(R.__, machine.numberOfCassettes),
it => {
steps.push({
type: `cassette${it}`,
display: `Cassette ${it}`,
component: Autocomplete,
inputProps: {
options: R.map(it => ({ code: it, display: it }))(options),
labelProp: 'display',
valueProp: 'code'
}
})
}
]
return R.add(1, it)
},
1
)
steps.push({
type: 'zeroConfLimit',
display: '0-conf Limit',
schema: Yup.object().shape({
zeroConfLimit: Yup.number().required()
})
})
const schema = () =>
Yup.object().shape({
cassette1: Yup.number().required(),
cassette2: step >= 2 ? Yup.number().required() : Yup.number(),
cassette3: step >= 3 ? Yup.number().required() : Yup.number(),
cassette4: step >= 4 ? Yup.number().required() : Yup.number()
cassette2:
machine.numberOfCassettes > 1 && step >= 2
? Yup.number().required()
: Yup.number()
.transform(transformNumber)
.nullable(),
cassette3:
machine.numberOfCassettes > 2 && step >= 3
? Yup.number().required()
: Yup.number()
.transform(transformNumber)
.nullable(),
cassette4:
machine.numberOfCassettes > 3 && step >= 4
? Yup.number().required()
: Yup.number()
.transform(transformNumber)
.nullable()
})
return (
@ -122,6 +119,7 @@ const Wizard = ({ machine, locale, onClose, save, error }) => {
<WizardStep
step={step}
name={machine.name}
numberOfCassettes={machine.numberOfCassettes}
error={error}
lastStep={isLastStep}
steps={steps}