From f294a83ebc8de0d4acd9a4a8fd4b1909c6e6917d Mon Sep 17 00:00:00 2001 From: Nikola Ubavic <53820106+ubavic@users.noreply.github.com> Date: Mon, 18 Oct 2021 12:28:13 +0200 Subject: [PATCH 1/2] fix: add unique machine name validation --- .../src/pages/AddMachine/AddMachine.js | 52 ++++++++++++++----- .../src/pages/AddMachine/styles.js | 6 ++- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/new-lamassu-admin/src/pages/AddMachine/AddMachine.js b/new-lamassu-admin/src/pages/AddMachine/AddMachine.js index 368a522f..5c5bd46f 100644 --- a/new-lamassu-admin/src/pages/AddMachine/AddMachine.js +++ b/new-lamassu-admin/src/pages/AddMachine/AddMachine.js @@ -109,8 +109,16 @@ const initialValues = { const validationSchema = Yup.object().shape({ name: Yup.string() - .required() + .required('Machine name is required.') .max(50) + .test( + 'unique-name', + 'Machine name is already in use.', + (value, context) => { + if (context.options.context.machineNames.includes(value)) return false + return true + } + ) }) const MachineNameComponent = ({ nextStep, classes, setQrCode, setName }) => { @@ -125,6 +133,19 @@ const MachineNameComponent = ({ nextStep, classes, setQrCode, setName }) => { onError: e => console.log(e) }) + const { data } = useQuery(GET_MACHINES) + const machineNames = R.map(R.prop('name'), data?.machines || {}) + + const uniqueNameValidator = value => { + try { + validationSchema.validateSync(value, { + context: { machineNames: machineNames } + }) + } catch (error) { + return error + } + } + return ( <> @@ -134,23 +155,26 @@ const MachineNameComponent = ({ nextStep, classes, setQrCode, setName }) => { validateOnBlur={false} validateOnChange={false} initialValues={initialValues} - validationSchema={validationSchema} + validate={uniqueNameValidator} onSubmit={({ name }) => { setName(name) register({ variables: { name } }) }}> -
-
- -
-
- -
-
+ {({ errors }) => ( +
+
+ +
+ {errors &&

{errors.message}

} +
+ +
+
+ )} ) diff --git a/new-lamassu-admin/src/pages/AddMachine/styles.js b/new-lamassu-admin/src/pages/AddMachine/styles.js index f29e9f24..8e11e216 100644 --- a/new-lamassu-admin/src/pages/AddMachine/styles.js +++ b/new-lamassu-admin/src/pages/AddMachine/styles.js @@ -5,7 +5,8 @@ import { primaryColor, mainWidth, spring2, - spring3 + spring3, + errorColor } from 'src/styling/variables' const { tl2, p } = typographyStyles @@ -122,6 +123,9 @@ const styles = { display: 'flex', flexDirection: 'col', alignItems: 'center' + }, + errorMessage: { + color: errorColor } } From 6012c33f814ec87401a77e717fd48281cad29c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Ubavi=C4=87?= <53820106+ubavic@users.noreply.github.com> Date: Mon, 25 Oct 2021 11:02:49 +0200 Subject: [PATCH 2/2] Suggestion accepted Co-authored-by: chaotixkilla --- new-lamassu-admin/src/pages/AddMachine/AddMachine.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/new-lamassu-admin/src/pages/AddMachine/AddMachine.js b/new-lamassu-admin/src/pages/AddMachine/AddMachine.js index 5c5bd46f..45d531d1 100644 --- a/new-lamassu-admin/src/pages/AddMachine/AddMachine.js +++ b/new-lamassu-admin/src/pages/AddMachine/AddMachine.js @@ -114,10 +114,7 @@ const validationSchema = Yup.object().shape({ .test( 'unique-name', 'Machine name is already in use.', - (value, context) => { - if (context.options.context.machineNames.includes(value)) return false - return true - } + (value, context) => !context.options.context.machineNames.includes(value) ) })