From bba01d685b54d74a064e6700d2f6849a3582e6ec Mon Sep 17 00:00:00 2001 From: axolotle Date: Tue, 29 Aug 2023 16:31:38 +0200 Subject: [PATCH] redirect on password change + rename args --- pages/edit.vue | 66 ++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/pages/edit.vue b/pages/edit.vue index 2b26a7f..cbb0c72 100644 --- a/pages/edit.vue +++ b/pages/edit.vue @@ -20,20 +20,20 @@ const { handleSubmit, setFieldError, resetForm, meta } = useForm({ yup.object({ // username: yup.string().required(), fullname: yup.string().required().min(2), - currentPassword: yup + currentpassword: yup .string() - .when('newPassword', ([newPassword], schema) => { - return newPassword ? schema.required() : schema + .when('newpassword', ([newpassword], schema) => { + return newpassword ? schema.required() : schema }), - newPassword: yup.string().matches(/.{8,}/, { + newpassword: yup.string().matches(/.{8,}/, { excludeEmptyString: true, message: { key: 'v.string_too_short', values: { min: 8 } }, }), - confirmNewPassword: yup + confirmpassword: yup .string() - .when('newPassword', ([newPassword], schema) => { - return newPassword - ? schema.oneOf([yup.ref('newPassword')], 'v.password_not_match') + .when('newpassword', ([newpassword], schema) => { + return newpassword + ? schema.oneOf([yup.ref('newpassword')], 'v.password_not_match') : schema }), mailalias: yup.array().of(yup.string().email().required()).required(), @@ -41,15 +41,15 @@ const { handleSubmit, setFieldError, resetForm, meta } = useForm({ }), ), initialValues: { - currentPassword: '', - newPassword: '', - confirmNewPassword: '', + currentpassword: '', + newpassword: '', + confirmpassword: '', ...pick(userData.value, 'fullname', 'mailalias', 'mailforward'), }, }) watch( - () => meta.value.touched, + () => meta.value.dirty, (value) => { // remove loading and feedback on edition if (value) { @@ -66,10 +66,12 @@ const onSubmit = handleSubmit(async (form) => { Pick >('/update', { method: 'PUT', - body: exclude(form, 'confirmNewPassword'), + body: exclude(form, 'confirmpassword'), }) if (error.value) { + // Reset form dirty state but keep previous values + resetForm({ values: form }) const errData = error.value.data if (errData.path) { setFieldError(errData.path, errData.error) @@ -77,17 +79,23 @@ const onSubmit = handleSubmit(async (form) => { feedback.value = { variant: 'error', icon: 'mdi:alert', - message: errData.error, + message: errData.error || errData, } } } else if (data.value) { + // redirect on password change + if (form.newpassword) { + useIsLoggedIn().value = false + return navigateTo('/login') + } + update(data.value) resetForm({ values: { ...data.value, - currentPassword: '', - newPassword: '', - confirmNewPassword: '', + currentpassword: '', + newpassword: '', + confirmpassword: '', }, }) feedback.value = { @@ -105,8 +113,6 @@ const onSubmit = handleSubmit(async (form) => {
- -
+ +