Merge pull request #1019 from chaotixkilla/fix-custom-info-request-bailing-out

Fix custom trigger filtering when in presence of older triggers
This commit is contained in:
Rafael Taranto 2022-01-18 09:42:26 +00:00 committed by GitHub
commit 08bcf03a1e
3 changed files with 67 additions and 25 deletions

View file

@ -41,8 +41,8 @@ const createTerms = terms => (terms.active && terms.text) ? ({
const buildTriggers = (allTriggers) => { const buildTriggers = (allTriggers) => {
const normalTriggers = [] const normalTriggers = []
const customTriggers = _.filter(o => { const customTriggers = _.filter(o => {
if (o.customInfoRequestId === '') normalTriggers.push(o) if (_.isEmpty(o.customInfoRequestId) || _.isNil(o.customInfoRequestId)) normalTriggers.push(o)
return o.customInfoRequestId !== '' return !_.isNil(o.customInfoRequestId) && !_.isEmpty(o.customInfoRequestId)
}, allTriggers) }, allTriggers)
return _.flow([_.map(_.get('customInfoRequestId')), customRequestQueries.batchGetCustomInfoRequest])(customTriggers) return _.flow([_.map(_.get('customInfoRequestId')), customRequestQueries.batchGetCustomInfoRequest])(customTriggers)

View file

@ -230,12 +230,18 @@ const Wizard = ({ onClose, save, error, currency, customInfoRequests }) => {
const triggerType = values?.triggerType const triggerType = values?.triggerType
const containsType = R.contains(triggerType) const containsType = R.contains(triggerType)
const isSuspend = values?.requirement?.requirement === 'suspend' const isSuspend = values?.requirement?.requirement === 'suspend'
const isCustom = values?.requirement?.requirement === 'custom'
const hasRequirementError = const hasRequirementError = requirements().hasRequirementError(
!!errors.requirement && errors,
!!touched.requirement?.suspensionDays && touched,
(!values.requirement?.suspensionDays || values
values.requirement?.suspensionDays < 0) )
const hasCustomRequirementError = requirements().hasCustomRequirementError(
errors,
touched,
values
)
const hasAmountError = const hasAmountError =
!!errors.threshold && !!errors.threshold &&
@ -258,7 +264,11 @@ const Wizard = ({ onClose, save, error, currency, customInfoRequests }) => {
) )
return errors.threshold return errors.threshold
if (isSuspend && hasRequirementError) return errors.requirement if (
(isSuspend && hasRequirementError) ||
(isCustom && hasCustomRequirementError)
)
return errors.requirement
} }
return ( return (

View file

@ -477,21 +477,43 @@ const requirementSchema = Yup.object()
otherwise: Yup.number() otherwise: Yup.number()
.nullable() .nullable()
.transform(() => null) .transform(() => null)
}),
customInfoRequestId: Yup.string().when('requirement', {
is: value => value === 'custom',
then: Yup.string(),
otherwise: Yup.string()
.nullable()
.transform(() => '')
}) })
}).required() }).required()
}) })
.test(({ requirement }, context) => { .test(({ requirement }, context) => {
const requirementValidator = requirement => const requirementValidator = (requirement, type) => {
requirement.requirement === 'suspend' switch (type) {
? requirement.suspensionDays > 0 case 'suspend':
: true return requirement.requirement === type
? requirement.suspensionDays > 0
: true
case 'custom':
return requirement.requirement === type
? !R.isNil(requirement.customInfoRequestId)
: true
default:
return true
}
}
if (requirement && requirementValidator(requirement)) return if (requirement && !requirementValidator(requirement, 'suspend'))
return context.createError({
path: 'requirement',
message: 'Suspension days must be greater than 0'
})
return context.createError({ if (requirement && !requirementValidator(requirement, 'custom'))
path: 'requirement', return context.createError({
message: 'Suspension days must be greater than 0' path: 'requirement',
}) message: 'You must select an item'
})
}) })
const requirementOptions = [ const requirementOptions = [
@ -506,6 +528,18 @@ const requirementOptions = [
{ display: 'Block', code: 'block' } { display: 'Block', code: 'block' }
] ]
const hasRequirementError = (errors, touched, values) =>
!!errors.requirement &&
!!touched.requirement?.suspensionDays &&
(!values.requirement?.suspensionDays ||
values.requirement?.suspensionDays < 0)
const hasCustomRequirementError = (errors, touched, values) =>
!!errors.requirement &&
!!touched.requirement?.customInfoRequestId &&
(!values.requirement?.customInfoRequestId ||
!R.isNil(values.requirement?.customInfoRequestId))
const Requirement = ({ customInfoRequests }) => { const Requirement = ({ customInfoRequests }) => {
const classes = useStyles() const classes = useStyles()
const { const {
@ -524,12 +558,6 @@ const Requirement = ({ customInfoRequests }) => {
display: it.customRequest.name display: it.customRequest.name
})) }))
const hasRequirementError =
!!errors.requirement &&
!!touched.requirement?.suspensionDays &&
(!values.requirement?.suspensionDays ||
values.requirement?.suspensionDays < 0)
const enableCustomRequirement = customInfoRequests?.length > 0 const enableCustomRequirement = customInfoRequests?.length > 0
const customInfoOption = { const customInfoOption = {
display: 'Custom information requirement', display: 'Custom information requirement',
@ -540,7 +568,9 @@ const Requirement = ({ customInfoRequests }) => {
: [...requirementOptions, { ...customInfoOption, disabled: true }] : [...requirementOptions, { ...customInfoOption, disabled: true }]
const titleClass = { const titleClass = {
[classes.error]: [classes.error]:
(!!errors.requirement && !isSuspend) || (isSuspend && hasRequirementError) (!!errors.requirement && !isSuspend && !isCustom) ||
(isSuspend && hasRequirementError(errors, touched, values)) ||
(isCustom && hasCustomRequirementError(errors, touched, values))
} }
return ( return (
@ -569,7 +599,7 @@ const Requirement = ({ customInfoRequests }) => {
label="Days" label="Days"
size="lg" size="lg"
name="requirement.suspensionDays" name="requirement.suspensionDays"
error={hasRequirementError} error={hasRequirementError(errors, touched, values)}
/> />
)} )}
{isCustom && ( {isCustom && (
@ -592,6 +622,8 @@ const requirements = customInfoRequests => ({
options: requirementOptions, options: requirementOptions,
Component: Requirement, Component: Requirement,
props: { customInfoRequests }, props: { customInfoRequests },
hasRequirementError: hasRequirementError,
hasCustomRequirementError: hasCustomRequirementError,
initialValues: { initialValues: {
requirement: { requirement: {
requirement: '', requirement: '',