aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortusooa <tusooa@kazv.moe>2023-07-25 10:46:27 -0400
committertusooa <tusooa@kazv.moe>2024-01-13 17:41:57 -0500
commit82c00449638a7aa06b63454f6dc5a44924a6d36e (patch)
tree2a83119fd3051e7cd29bc73f16f1b8a9e9606b7a
parentf5b4b5f7770dad5c8a90bce2263d3a97b9ad2d00 (diff)
Show a dedicated registration notice page when further action is required after registering
-rw-r--r--changelog.d/registration-notice.add1
-rw-r--r--src/components/registration/registration.js10
-rw-r--r--src/components/registration/registration.vue14
-rw-r--r--src/modules/users.js21
4 files changed, 40 insertions, 6 deletions
diff --git a/changelog.d/registration-notice.add b/changelog.d/registration-notice.add
new file mode 100644
index 00000000..b2777ba2
--- /dev/null
+++ b/changelog.d/registration-notice.add
@@ -0,0 +1 @@
+Show a dedicated registration notice page when further action is required after registering
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index b88bdeec..ca1fed94 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -83,6 +83,8 @@ const registration = {
signedIn: (state) => !!state.users.currentUser,
isPending: (state) => state.users.signUpPending,
serverValidationErrors: (state) => state.users.signUpErrors,
+ signUpNotice: (state) => state.users.signUpNotice,
+ hasSignUpNotice: (state) => !!state.users.signUpNotice.message,
termsOfService: (state) => state.instance.tos,
accountActivationRequired: (state) => state.instance.accountActivationRequired,
accountApprovalRequired: (state) => state.instance.accountApprovalRequired,
@@ -107,8 +109,12 @@ const registration = {
if (!this.v$.$invalid) {
try {
- await this.signUp(this.user)
- this.$router.push({ name: 'friends' })
+ const status = await this.signUp(this.user)
+ if (status === 'ok') {
+ this.$router.push({ name: 'friends' })
+ } else {
+ // display sign up notice, do not switch anywhere
+ }
} catch (error) {
console.warn('Registration failed: ', error)
this.setCaptcha()
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
index 7438a5f4..5c913f94 100644
--- a/src/components/registration/registration.vue
+++ b/src/components/registration/registration.vue
@@ -3,7 +3,10 @@
<div class="panel-heading">
{{ $t('registration.registration') }}
</div>
- <div class="panel-body">
+ <div
+ v-if="!hasSignUpNotice"
+ class="panel-body"
+ >
<form
class="registration-form"
@submit.prevent="submit(user)"
@@ -307,6 +310,11 @@
</div>
</form>
</div>
+ <div v-else>
+ <p class="registration-notice">
+ {{ signUpNotice.message }}
+ </p>
+ </div>
</div>
</template>
@@ -404,6 +412,10 @@ $validations-cRed: #f04124;
}
}
+.registration-notice {
+ margin: 0.6em;
+}
+
@media all and (max-width: 800px) {
.registration-form .container {
flex-direction: column-reverse;
diff --git a/src/modules/users.js b/src/modules/users.js
index 6467d732..b8f49f15 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -250,6 +250,7 @@ export const mutations = {
signUpPending (state) {
state.signUpPending = true
state.signUpErrors = []
+ state.signUpNotice = {}
},
signUpSuccess (state) {
state.signUpPending = false
@@ -257,6 +258,12 @@ export const mutations = {
signUpFailure (state, errors) {
state.signUpPending = false
state.signUpErrors = errors
+ state.signUpNotice = {}
+ },
+ signUpNotice (state, notice) {
+ state.signUpPending = false
+ state.signUpErrors = []
+ state.signUpNotice = notice
}
}
@@ -287,6 +294,7 @@ export const defaultState = {
usersByNameObject: {},
signUpPending: false,
signUpErrors: [],
+ signUpNotice: {},
relationships: {}
}
@@ -524,9 +532,16 @@ const users = {
const data = await rootState.api.backendInteractor.register(
{ params: { ...userInfo } }
)
- store.commit('signUpSuccess')
- store.commit('setToken', data.access_token)
- store.dispatch('loginUser', data.access_token)
+
+ if (data.access_token) {
+ store.commit('signUpSuccess')
+ store.commit('setToken', data.access_token)
+ store.dispatch('loginUser', data.access_token)
+ return 'ok'
+ } else { // Request succeeded, but user cannot login yet.
+ store.commit('signUpNotice', data)
+ return 'request_sent'
+ }
} catch (e) {
const errors = e.message
store.commit('signUpFailure', errors)