fix: advanced requirements list and prohibit duplicate overrides

This commit is contained in:
José Oliveira 2021-06-23 18:51:20 +01:00 committed by Josh Harvey
parent abbcda793b
commit 19e9f54fab
2 changed files with 53 additions and 18 deletions

View file

@ -9,7 +9,7 @@ import { fromNamespace, toNamespace, namespaces } from 'src/utils/config'
import { import {
defaultSchema, defaultSchema,
overridesSchema, getOverridesSchema,
defaults, defaults,
overridesDefaults, overridesDefaults,
getDefaultSettings, getDefaultSettings,
@ -95,7 +95,7 @@ const AdvancedTriggersSettings = memo(() => {
enableCreate enableCreate
initialValues={overridesDefaults} initialValues={overridesDefaults}
save={saveOverrides} save={saveOverrides}
validationSchema={overridesSchema} validationSchema={getOverridesSchema(requirementsOverrides)}
data={requirementsOverrides} data={requirementsOverrides}
elements={getOverrides()} elements={getOverrides()}
setEditing={onEditingOverrides} setEditing={onEditingOverrides}

View file

@ -1,7 +1,27 @@
import * as R from 'ramda'
import * as Yup from 'yup' import * as Yup from 'yup'
import Autocomplete from 'src/components/inputs/formik/Autocomplete.js' import Autocomplete from 'src/components/inputs/formik/Autocomplete.js'
import { getView, requirementOptions } from 'src/pages/Triggers/helper' import { getView } from 'src/pages/Triggers/helper'
const advancedRequirementOptions = [
{ display: 'SMS verification', code: 'sms' },
{ display: 'ID card image', code: 'idCardPhoto' },
{ display: 'ID data', code: 'idCardData' },
{ display: 'Customer camera', code: 'facephoto' },
{ display: 'US SSN', code: 'usSsn' }
]
const alreadyExists = (values, requirement) => {
return R.isEmpty(R.filter(value => value.requirement === requirement)(values))
}
const displayRequirement = code => {
return R.prop(
'display',
R.find(R.propEq('code', code))(advancedRequirementOptions)
)
}
const defaultSchema = Yup.object().shape({ const defaultSchema = Yup.object().shape({
expirationTime: Yup.string() expirationTime: Yup.string()
@ -13,18 +33,33 @@ const defaultSchema = Yup.object().shape({
.required() .required()
}) })
const overridesSchema = Yup.object().shape({ const getOverridesSchema = values => {
id: Yup.string() return Yup.object().shape({
.label('Requirement') id: Yup.string()
.required(), .label('Requirement')
expirationTime: Yup.string() .required()
.label('Expiration time') .test({
.required(), test() {
automation: Yup.string() const { requirement } = this.parent
.label('Automation') if (!alreadyExists(values, requirement)) {
.matches(/(Manual|Automatic)/) return this.createError({
.required() message: `Requirement ${displayRequirement(
}) requirement
)} already overriden`
})
}
return true
}
}),
expirationTime: Yup.string()
.label('Expiration time')
.required(),
automation: Yup.string()
.label('Automation')
.matches(/(Manual|Automatic)/)
.required()
})
}
const getDefaultSettings = () => { const getDefaultSettings = () => {
return [ return [
@ -60,10 +95,10 @@ const getOverrides = () => {
header: 'Requirement', header: 'Requirement',
width: 196, width: 196,
size: 'sm', size: 'sm',
view: getView(requirementOptions, 'display'), view: getView(advancedRequirementOptions, 'display'),
input: Autocomplete, input: Autocomplete,
inputProps: { inputProps: {
options: requirementOptions, options: advancedRequirementOptions,
labelProp: 'display', labelProp: 'display',
valueProp: 'code' valueProp: 'code'
} }
@ -108,7 +143,7 @@ const overridesDefaults = {
export { export {
defaultSchema, defaultSchema,
overridesSchema, getOverridesSchema,
defaults, defaults,
overridesDefaults, overridesDefaults,
getDefaultSettings, getDefaultSettings,