63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
|
import { mapState } from 'vuex'
|
||
|
import passwordResetApi from '../../services/new_api/password_reset.js'
|
||
|
|
||
|
const passwordReset = {
|
||
|
data: () => ({
|
||
|
user: {
|
||
|
email: ''
|
||
|
},
|
||
|
isPending: false,
|
||
|
success: false,
|
||
|
throttled: false,
|
||
|
error: null
|
||
|
}),
|
||
|
computed: {
|
||
|
...mapState({
|
||
|
signedIn: (state) => !!state.users.currentUser,
|
||
|
instance: state => state.instance
|
||
|
}),
|
||
|
mailerEnabled () {
|
||
|
return this.instance.mailerEnabled
|
||
|
}
|
||
|
},
|
||
|
created () {
|
||
|
if (this.signedIn) {
|
||
|
this.$router.push({ name: 'root' })
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
dismissError () {
|
||
|
this.error = null
|
||
|
},
|
||
|
submit () {
|
||
|
this.isPending = true
|
||
|
const email = this.user.email
|
||
|
const instance = this.instance.server
|
||
|
|
||
|
passwordResetApi({ instance, email }).then(({ status }) => {
|
||
|
this.isPending = false
|
||
|
this.user.email = ''
|
||
|
|
||
|
if (status === 204) {
|
||
|
this.success = true
|
||
|
this.error = null
|
||
|
} else if (status === 404 || status === 400) {
|
||
|
this.error = this.$t('password_reset.not_found')
|
||
|
this.$nextTick(() => {
|
||
|
this.$refs.email.focus()
|
||
|
})
|
||
|
} else if (status === 429) {
|
||
|
this.throttled = true
|
||
|
this.error = this.$t('password_reset.too_many_requests')
|
||
|
}
|
||
|
}).catch(() => {
|
||
|
this.isPending = false
|
||
|
this.user.email = ''
|
||
|
this.error = this.$t('general.generic_error')
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default passwordReset
|