Add notifications

This commit is contained in:
Hubert Van De Walle 2020-06-09 02:59:15 +02:00
parent ff829e5922
commit 7c92d9d9bc
6 changed files with 51 additions and 12 deletions

View File

@ -1,6 +1,6 @@
<template> <template>
<v-card flat> <v-card flat>
<v-form ref="form" v-model="valid" lazy-validation> <v-form ref="form" v-model="valid">
<v-card-text> <v-card-text>
<v-text-field <v-text-field
v-model="form.username" v-model="form.username"
@ -52,9 +52,16 @@ export default {
}), }),
methods: { methods: {
userLogin() { userLogin() {
this.$auth.loginWith('local', { this.$auth
data: this.form, .loginWith('local', {
}) data: this.form,
})
.then((_) =>
this.$root.$emit('toast', 'Welcome back', 'success')
)
.catch((_) =>
this.$root.$emit('toast', 'Invalid credentials', 'error')
)
}, },
}, },
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<v-card flat> <v-card flat>
<v-form ref="form" v-model="valid" lazy-validation> <v-form ref="form" v-model="valid">
<v-card-text> <v-card-text>
<v-text-field <v-text-field
v-model="form.username" v-model="form.username"
@ -57,7 +57,7 @@ import { mdiLock, mdiAccount, mdiAt } from '@mdi/js'
export default { export default {
name: 'RegisterForm', name: 'RegisterForm',
data: () => ({ data: (vm) => ({
mdiLock, mdiLock,
mdiAccount, mdiAccount,
mdiAt, mdiAt,
@ -67,7 +67,10 @@ export default {
email: '', email: '',
password: '', password: '',
}, },
usernameRules: [(v) => !!v || 'Name is required'], usernameRules: [
(v) => !!v || 'Name is required',
(v) => /^[a-zA-Z0-9]+$/.test(v) || 'Name must be alphanumeric',
],
emailRules: [ emailRules: [
(v) => !!v || 'Email is required', (v) => !!v || 'Email is required',
(v) => /.+@.+/.test(v) || 'E-mail must be valid', (v) => /.+@.+/.test(v) || 'E-mail must be valid',
@ -79,13 +82,21 @@ export default {
confirm: '', confirm: '',
confirmRules: [ confirmRules: [
(v) => !!v || 'Password is required', (v) => !!v || 'Password is required',
// v => confirmEquals() || 'Both passwords must be equals', (v) => v === vm.form.password || 'Both passwords must be equals',
], ],
}), }),
methods: { methods: {
async registerUser() { registerUser() {
const data = await this.$axios.post('/user', this.form) this.$axios
console.log(data) .post('/user', this.form)
.then((_) => this.$root.$emit('register::success'))
.catch((_) =>
this.$root.$emit(
'toast',
'Please choose another username',
'error'
)
)
}, },
}, },
} }

View File

@ -6,6 +6,9 @@
<v-row no-gutters justify="center"> <v-row no-gutters justify="center">
<nuxt /> <nuxt />
</v-row> </v-row>
<v-snackbar v-model="toast" :color="color">{{
msg
}}</v-snackbar>
</v-container> </v-container>
</v-content> </v-content>
</v-app> </v-app>
@ -16,6 +19,18 @@ import Navbar from '@/components/Navbar'
export default { export default {
components: { Navbar }, components: { Navbar },
data: () => ({
toast: false,
color: '',
msg: '',
}),
mounted() {
this.$root.$on('toast', (msg, color) => {
this.msg = msg
this.color = color ?? ''
this.toast = true
})
},
} }
</script> </script>

View File

@ -94,7 +94,7 @@ export default {
redirect: { redirect: {
login: '/account', login: '/account',
logout: '/', logout: '/',
home: '/', home: '/notes',
}, },
watchLoggedIn: true, watchLoggedIn: true,
cookie: { cookie: {

View File

@ -48,6 +48,12 @@ export default {
tab: 0, tab: 0,
tabs: ['Login', 'Register'], tabs: ['Login', 'Register'],
}), }),
mounted() {
this.$root.$on('register::success', () => {
this.$root.$emit('toast', 'Welcome', 'success')
this.tab = 0
})
},
head: () => ({ head: () => ({
title: 'Account', title: 'Account',
}), }),

0
frontend/store/notes.js Normal file
View File