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,10 +33,24 @@ const defaultSchema = Yup.object().shape({
.required() .required()
}) })
const overridesSchema = Yup.object().shape({ const getOverridesSchema = values => {
return Yup.object().shape({
id: Yup.string() id: Yup.string()
.label('Requirement') .label('Requirement')
.required(), .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() expirationTime: Yup.string()
.label('Expiration time') .label('Expiration time')
.required(), .required(),
@ -25,6 +59,7 @@ const overridesSchema = Yup.object().shape({
.matches(/(Manual|Automatic)/) .matches(/(Manual|Automatic)/)
.required() .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,