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 {
defaultSchema,
overridesSchema,
getOverridesSchema,
defaults,
overridesDefaults,
getDefaultSettings,
@ -95,7 +95,7 @@ const AdvancedTriggersSettings = memo(() => {
enableCreate
initialValues={overridesDefaults}
save={saveOverrides}
validationSchema={overridesSchema}
validationSchema={getOverridesSchema(requirementsOverrides)}
data={requirementsOverrides}
elements={getOverrides()}
setEditing={onEditingOverrides}

View file

@ -1,7 +1,27 @@
import * as R from 'ramda'
import * as Yup from 'yup'
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({
expirationTime: Yup.string()
@ -13,18 +33,33 @@ const defaultSchema = Yup.object().shape({
.required()
})
const overridesSchema = Yup.object().shape({
id: Yup.string()
.label('Requirement')
.required(),
expirationTime: Yup.string()
.label('Expiration time')
.required(),
automation: Yup.string()
.label('Automation')
.matches(/(Manual|Automatic)/)
.required()
})
const getOverridesSchema = values => {
return Yup.object().shape({
id: Yup.string()
.label('Requirement')
.required()
.test({
test() {
const { requirement } = this.parent
if (!alreadyExists(values, requirement)) {
return this.createError({
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 = () => {
return [
@ -60,10 +95,10 @@ const getOverrides = () => {
header: 'Requirement',
width: 196,
size: 'sm',
view: getView(requirementOptions, 'display'),
view: getView(advancedRequirementOptions, 'display'),
input: Autocomplete,
inputProps: {
options: requirementOptions,
options: advancedRequirementOptions,
labelProp: 'display',
valueProp: 'code'
}
@ -108,7 +143,7 @@ const overridesDefaults = {
export {
defaultSchema,
overridesSchema,
getOverridesSchema,
defaults,
overridesDefaults,
getDefaultSettings,