From 2f4c0edc81f369cf336f74687a543428d9cf32b4 Mon Sep 17 00:00:00 2001 From: lukicenturi Date: Thu, 20 Jul 2023 14:42:26 +0700 Subject: [PATCH] feat: introduces new registration page design --- app.vue | 8 +- assets/css/main.scss | 7 +- .../account/activation/AccountActivate.vue | 53 +- .../account/activation/PendingActivation.vue | 31 +- .../account/home/AccountInformation.vue | 16 +- components/account/home/ChangePassword.vue | 5 +- components/account/home/DangerZone.vue | 29 +- .../account/home/UnverifiedEmailWarning.vue | 27 +- components/account/login/LoginForm.vue | 236 ++++---- components/account/login/LoginModal.vue | 4 +- components/account/login/LoginPage.vue | 36 +- .../account/password/PasswordChanged.vue | 33 +- components/account/password/PasswordForm.vue | 93 ++- .../account/password/PasswordLinkSend.vue | 26 +- components/account/password/PasswordReset.vue | 182 +++--- components/account/signup/SignupAccount.vue | 174 ++++++ components/account/signup/SignupAddress.vue | 233 ++++++++ .../signup/SignupCustomerInformation.vue | 137 +++++ components/account/signup/SignupForm.vue | 531 +++++------------- .../account/signup/SignupIntroduction.vue | 40 ++ components/common/PageContainer.vue | 2 +- components/footer/PageFooter.vue | 20 +- components/header/PageHeader.vue | 6 +- layouts/default.vue | 37 +- layouts/landing.vue | 12 + locales/en.json | 128 ++++- package.json | 2 +- pages/activate/[uid]/[token].vue | 4 - pages/activation.vue | 4 - pages/download.vue | 4 + pages/index.vue | 4 + pages/login.vue | 4 - pages/password/changed.vue | 4 - pages/password/recover.vue | 4 - pages/password/reset/[uid]/[token].vue | 4 - pages/password/reset/index.vue | 4 - pages/password/send.vue | 4 - pages/signup.vue | 4 - pnpm-lock.yaml | 8 +- tests/e2e/specs/pages/signup.spec.cy.ts | 68 ++- types/common.ts | 2 + types/index.ts | 4 +- types/signup.ts | 19 +- utils/validation.ts | 12 + 44 files changed, 1354 insertions(+), 911 deletions(-) create mode 100644 components/account/signup/SignupAccount.vue create mode 100644 components/account/signup/SignupAddress.vue create mode 100644 components/account/signup/SignupCustomerInformation.vue create mode 100644 components/account/signup/SignupIntroduction.vue create mode 100644 layouts/landing.vue create mode 100644 utils/validation.ts diff --git a/app.vue b/app.vue index 8e7f33e9..f8eacfa7 100644 --- a/app.vue +++ b/app.vue @@ -1,7 +1,5 @@ diff --git a/assets/css/main.scss b/assets/css/main.scss index 526b04c0..054c3a92 100644 --- a/assets/css/main.scss +++ b/assets/css/main.scss @@ -1,12 +1,11 @@ @import "media"; .page { - scroll-behavior: smooth; - overflow-x: hidden; + @apply overflow-x-hidden scroll-smooth; } .body { - @apply overflow-x-hidden overflow-y-hidden text-rui-text; + @apply text-rui-text; } .container { @@ -18,5 +17,5 @@ } .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { - opacity: 0; + @apply opacity-0; } diff --git a/components/account/activation/AccountActivate.vue b/components/account/activation/AccountActivate.vue index b7d5b172..a97b17e8 100644 --- a/components/account/activation/AccountActivate.vue +++ b/components/account/activation/AccountActivate.vue @@ -22,39 +22,34 @@ const validateToken = async () => { }; onBeforeMount(async () => await validateToken()); - -const css = useCssModule(); +const { t } = useI18n(); - - diff --git a/components/account/activation/PendingActivation.vue b/components/account/activation/PendingActivation.vue index 31b46601..257f47da 100644 --- a/components/account/activation/PendingActivation.vue +++ b/components/account/activation/PendingActivation.vue @@ -1,27 +1,16 @@ - - diff --git a/components/account/home/AccountInformation.vue b/components/account/home/AccountInformation.vue index ee4e1584..c7577313 100644 --- a/components/account/home/AccountInformation.vue +++ b/components/account/home/AccountInformation.vue @@ -203,17 +203,11 @@ const css = useCssModule(); @blur="v$.country.$touch()" /> - - Update - +
+ + Update + +
diff --git a/components/account/home/ChangePassword.vue b/components/account/home/ChangePassword.vue index c15b8572..0c27907e 100644 --- a/components/account/home/ChangePassword.vue +++ b/components/account/home/ChangePassword.vue @@ -112,14 +112,11 @@ const css = useCssModule(); autocomplete="new-password" /> -
+
diff --git a/components/account/home/DangerZone.vue b/components/account/home/DangerZone.vue index 9b924826..c59320be 100644 --- a/components/account/home/DangerZone.vue +++ b/components/account/home/DangerZone.vue @@ -34,28 +34,29 @@ const css = useCssModule(); diff --git a/components/account/login/LoginPage.vue b/components/account/login/LoginPage.vue index b9fa92df..7de1496a 100644 --- a/components/account/login/LoginPage.vue +++ b/components/account/login/LoginPage.vue @@ -1,33 +1,7 @@ - - - - diff --git a/components/account/password/PasswordChanged.vue b/components/account/password/PasswordChanged.vue index ef5b9e2a..c4d67df3 100644 --- a/components/account/password/PasswordChanged.vue +++ b/components/account/password/PasswordChanged.vue @@ -1,12 +1,27 @@ + + diff --git a/components/account/password/PasswordForm.vue b/components/account/password/PasswordForm.vue index 4ab8959a..702d2335 100644 --- a/components/account/password/PasswordForm.vue +++ b/components/account/password/PasswordForm.vue @@ -2,6 +2,7 @@ import { useVuelidate } from '@vuelidate/core'; import { email, required } from '@vuelidate/validators'; import { FetchError } from 'ofetch'; +import { get, set } from '@vueuse/core'; import { fetchWithCsrf } from '~/utils/api'; import { logger } from '~/utils/logger'; @@ -9,7 +10,7 @@ const emailAddress = ref(''); const loading = ref(false); const captchaId = ref(); const recaptcha = useRecaptcha(); -const { onError, onExpired, onSuccess } = recaptcha; +const { onError, onExpired, onSuccess, recaptchaToken } = recaptcha; const rules = { email: { required, email }, @@ -19,7 +20,7 @@ const rules = { const $externalResults = ref({}); const v$ = useVuelidate( rules, - { email: emailAddress, captcha: recaptcha.recaptchaToken }, + { email: emailAddress, captcha: recaptchaToken }, { $autoDirty: true, $externalResults, @@ -27,17 +28,17 @@ const v$ = useVuelidate( ); const setCaptchaId = (v: number) => { - captchaId.value = v; + set(captchaId, v); }; const reset = async () => { - loading.value = true; + set(loading, true); try { await fetchWithCsrf('/webapi/password-reset/request/', { method: 'post', body: { - captcha: recaptcha.recaptchaToken.value, - email: emailAddress.value, + captcha: get(recaptchaToken), + email: get(emailAddress), }, }); await navigateTo({ @@ -49,66 +50,58 @@ const reset = async () => { e.status === 400 && e.data?.message?.captcha ) { - window.grecaptcha?.reset(captchaId.value); + window.grecaptcha?.reset(get(captchaId)); onExpired(); - $externalResults.value = e.data.message; + set($externalResults, e.data.message); } logger.error(e); } - loading.value = false; + set(loading, false); }; -const css = useCssModule(); +const { t } = useI18n(); - - diff --git a/components/account/password/PasswordLinkSend.vue b/components/account/password/PasswordLinkSend.vue index e6e0e654..6aeef513 100644 --- a/components/account/password/PasswordLinkSend.vue +++ b/components/account/password/PasswordLinkSend.vue @@ -1,22 +1,16 @@ - - diff --git a/components/account/password/PasswordReset.vue b/components/account/password/PasswordReset.vue index 6a05ca2e..0632287a 100644 --- a/components/account/password/PasswordReset.vue +++ b/components/account/password/PasswordReset.vue @@ -1,16 +1,17 @@ - - diff --git a/components/account/signup/SignupAccount.vue b/components/account/signup/SignupAccount.vue new file mode 100644 index 00000000..86dd1bff --- /dev/null +++ b/components/account/signup/SignupAccount.vue @@ -0,0 +1,174 @@ + + + diff --git a/components/account/signup/SignupAddress.vue b/components/account/signup/SignupAddress.vue new file mode 100644 index 00000000..2de3a3f7 --- /dev/null +++ b/components/account/signup/SignupAddress.vue @@ -0,0 +1,233 @@ + + + diff --git a/components/account/signup/SignupCustomerInformation.vue b/components/account/signup/SignupCustomerInformation.vue new file mode 100644 index 00000000..24b127aa --- /dev/null +++ b/components/account/signup/SignupCustomerInformation.vue @@ -0,0 +1,137 @@ + + + diff --git a/components/account/signup/SignupForm.vue b/components/account/signup/SignupForm.vue index bf63ea8c..d8a6f260 100644 --- a/components/account/signup/SignupForm.vue +++ b/components/account/signup/SignupForm.vue @@ -1,420 +1,185 @@ - - - + +
+ diff --git a/components/account/signup/SignupIntroduction.vue b/components/account/signup/SignupIntroduction.vue new file mode 100644 index 00000000..d98a2acf --- /dev/null +++ b/components/account/signup/SignupIntroduction.vue @@ -0,0 +1,40 @@ + + + diff --git a/components/common/PageContainer.vue b/components/common/PageContainer.vue index 0fd61248..3b8b6a15 100644 --- a/components/common/PageContainer.vue +++ b/components/common/PageContainer.vue @@ -46,7 +46,7 @@ const slots = useSlots(); @import '@/assets/css/main.scss'; .wrapper { - @apply container flex flex-col flex-grow min-h-screen px-4; + @apply container flex flex-col flex-grow min-h-screen py-12; } .subtitle { diff --git a/components/footer/PageFooter.vue b/components/footer/PageFooter.vue index e10ee6b1..724bc6ba 100644 --- a/components/footer/PageFooter.vue +++ b/components/footer/PageFooter.vue @@ -1,13 +1,25 @@