From 807c5bfc8592a0c9a238957a36d731640eb3b61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Wed, 22 Dec 2021 18:31:32 +0000 Subject: [PATCH 1/2] fix: triggers wizard allowing empty custom requirement field fix: issue with custom requirement filtering when in presence of older triggers refactor: pull up methods fix: remove log --- lib/routes/pollingRoutes.js | 4 +- .../src/pages/Triggers/Wizard.js | 22 +++++-- .../src/pages/Triggers/helper.js | 66 ++++++++++++++----- 3 files changed, 67 insertions(+), 25 deletions(-) diff --git a/lib/routes/pollingRoutes.js b/lib/routes/pollingRoutes.js index ad7d0118..b57db854 100644 --- a/lib/routes/pollingRoutes.js +++ b/lib/routes/pollingRoutes.js @@ -41,8 +41,8 @@ const createTerms = terms => (terms.active && terms.text) ? ({ const buildTriggers = (allTriggers) => { const normalTriggers = [] const customTriggers = _.filter(o => { - if (o.customInfoRequestId === '') normalTriggers.push(o) - return o.customInfoRequestId !== '' + if (o.customInfoRequestId === '' || _.isNil(o.customInfoRequestId)) normalTriggers.push(o) + return !_.isNil(o.customInfoRequestId) }, allTriggers) return _.flow([_.map(_.get('customInfoRequestId')), customRequestQueries.batchGetCustomInfoRequest])(customTriggers) diff --git a/new-lamassu-admin/src/pages/Triggers/Wizard.js b/new-lamassu-admin/src/pages/Triggers/Wizard.js index dfc5fd03..050f272e 100644 --- a/new-lamassu-admin/src/pages/Triggers/Wizard.js +++ b/new-lamassu-admin/src/pages/Triggers/Wizard.js @@ -230,12 +230,18 @@ const Wizard = ({ onClose, save, error, currency, customInfoRequests }) => { const triggerType = values?.triggerType const containsType = R.contains(triggerType) const isSuspend = values?.requirement?.requirement === 'suspend' + const isCustom = values?.requirement?.requirement === 'custom' - const hasRequirementError = - !!errors.requirement && - !!touched.requirement?.suspensionDays && - (!values.requirement?.suspensionDays || - values.requirement?.suspensionDays < 0) + const hasRequirementError = requirements.hasRequirementError( + errors, + touched, + values + ) + const hasCustomRequirementError = requirements.hasCustomRequirementError( + errors, + touched, + values + ) const hasAmountError = !!errors.threshold && @@ -258,7 +264,11 @@ const Wizard = ({ onClose, save, error, currency, customInfoRequests }) => { ) return errors.threshold - if (isSuspend && hasRequirementError) return errors.requirement + if ( + (isSuspend && hasRequirementError) || + (isCustom && hasCustomRequirementError) + ) + return errors.requirement } return ( diff --git a/new-lamassu-admin/src/pages/Triggers/helper.js b/new-lamassu-admin/src/pages/Triggers/helper.js index f62b5ddf..6889fc66 100644 --- a/new-lamassu-admin/src/pages/Triggers/helper.js +++ b/new-lamassu-admin/src/pages/Triggers/helper.js @@ -477,21 +477,43 @@ const requirementSchema = Yup.object() otherwise: Yup.number() .nullable() .transform(() => null) + }), + customInfoRequestId: Yup.string().when('requirement', { + is: value => value === 'custom', + then: Yup.string(), + otherwise: Yup.string() + .nullable() + .transform(() => '') }) }).required() }) .test(({ requirement }, context) => { - const requirementValidator = requirement => - requirement.requirement === 'suspend' - ? requirement.suspensionDays > 0 - : true + const requirementValidator = (requirement, type) => { + switch (type) { + case 'suspend': + 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({ - path: 'requirement', - message: 'Suspension days must be greater than 0' - }) + if (requirement && !requirementValidator(requirement, 'custom')) + return context.createError({ + path: 'requirement', + message: 'You must select an item' + }) }) const requirementOptions = [ @@ -506,6 +528,18 @@ const requirementOptions = [ { 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 classes = useStyles() const { @@ -524,12 +558,6 @@ const Requirement = ({ customInfoRequests }) => { display: it.customRequest.name })) - const hasRequirementError = - !!errors.requirement && - !!touched.requirement?.suspensionDays && - (!values.requirement?.suspensionDays || - values.requirement?.suspensionDays < 0) - const enableCustomRequirement = customInfoRequests?.length > 0 const customInfoOption = { display: 'Custom information requirement', @@ -540,7 +568,9 @@ const Requirement = ({ customInfoRequests }) => { : [...requirementOptions, { ...customInfoOption, disabled: true }] const titleClass = { [classes.error]: - (!!errors.requirement && !isSuspend) || (isSuspend && hasRequirementError) + (!!errors.requirement && !isSuspend && !isCustom) || + (isSuspend && hasRequirementError(errors, touched, values)) || + (isCustom && hasCustomRequirementError(errors, touched, values)) } return ( @@ -569,7 +599,7 @@ const Requirement = ({ customInfoRequests }) => { label="Days" size="lg" name="requirement.suspensionDays" - error={hasRequirementError} + error={hasRequirementError(errors, touched, values)} /> )} {isCustom && ( @@ -592,6 +622,8 @@ const requirements = customInfoRequests => ({ options: requirementOptions, Component: Requirement, props: { customInfoRequests }, + hasRequirementError: hasRequirementError, + hasCustomRequirementError: hasCustomRequirementError, initialValues: { requirement: { requirement: '', From c241c458d32b853c2696317e4b00fe176074a7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Mon, 17 Jan 2022 23:59:43 +0000 Subject: [PATCH 2/2] fix: custom info request batching fix: issue from rebase --- lib/routes/pollingRoutes.js | 4 ++-- new-lamassu-admin/src/pages/Triggers/Wizard.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/routes/pollingRoutes.js b/lib/routes/pollingRoutes.js index b57db854..b4089d54 100644 --- a/lib/routes/pollingRoutes.js +++ b/lib/routes/pollingRoutes.js @@ -41,8 +41,8 @@ const createTerms = terms => (terms.active && terms.text) ? ({ const buildTriggers = (allTriggers) => { const normalTriggers = [] const customTriggers = _.filter(o => { - if (o.customInfoRequestId === '' || _.isNil(o.customInfoRequestId)) normalTriggers.push(o) - return !_.isNil(o.customInfoRequestId) + if (_.isEmpty(o.customInfoRequestId) || _.isNil(o.customInfoRequestId)) normalTriggers.push(o) + return !_.isNil(o.customInfoRequestId) && !_.isEmpty(o.customInfoRequestId) }, allTriggers) return _.flow([_.map(_.get('customInfoRequestId')), customRequestQueries.batchGetCustomInfoRequest])(customTriggers) diff --git a/new-lamassu-admin/src/pages/Triggers/Wizard.js b/new-lamassu-admin/src/pages/Triggers/Wizard.js index 050f272e..b78fc5fa 100644 --- a/new-lamassu-admin/src/pages/Triggers/Wizard.js +++ b/new-lamassu-admin/src/pages/Triggers/Wizard.js @@ -232,12 +232,12 @@ const Wizard = ({ onClose, save, error, currency, customInfoRequests }) => { const isSuspend = values?.requirement?.requirement === 'suspend' const isCustom = values?.requirement?.requirement === 'custom' - const hasRequirementError = requirements.hasRequirementError( + const hasRequirementError = requirements().hasRequirementError( errors, touched, values ) - const hasCustomRequirementError = requirements.hasCustomRequirementError( + const hasCustomRequirementError = requirements().hasCustomRequirementError( errors, touched, values