feat: using pinia to create sessionStore
get session user, login, logout, isLoggedIn to create a login page
This commit is contained in:
parent
f80dbafd1a
commit
833af842b1
@ -3,16 +3,20 @@ import './index.css'
|
|||||||
import { createApp } from 'vue'
|
import { createApp } from 'vue'
|
||||||
import router from './router'
|
import router from './router'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
|
import { createPinia } from "pinia";
|
||||||
|
|
||||||
import { FrappeUI, Button, setConfig, frappeRequest, resourcesPlugin } from 'frappe-ui'
|
import { FrappeUI, Button, setConfig, frappeRequest, resourcesPlugin } from 'frappe-ui'
|
||||||
|
|
||||||
|
// create a pinia instance
|
||||||
|
let pinia = createPinia();
|
||||||
|
|
||||||
let app = createApp(App)
|
let app = createApp(App)
|
||||||
|
|
||||||
setConfig('resourceFetcher', frappeRequest)
|
setConfig('resourceFetcher', frappeRequest)
|
||||||
|
|
||||||
app.use(router)
|
|
||||||
app.use(FrappeUI)
|
app.use(FrappeUI)
|
||||||
app.use(resourcesPlugin)
|
app.use(pinia);
|
||||||
|
app.use(router)
|
||||||
|
|
||||||
app.component('Button', Button)
|
app.component('Button', Button)
|
||||||
app.mount('#app')
|
app.mount('#app')
|
||||||
|
|||||||
46
frontend/src/stores/session.js
Normal file
46
frontend/src/stores/session.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import { defineStore } from 'pinia'
|
||||||
|
import { createResource } from 'frappe-ui'
|
||||||
|
import router from '@/router'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
export const sessionStore = defineStore('crm-session', () => {
|
||||||
|
const sessionUser = createResource({
|
||||||
|
url: 'crm.api.session.get_user_info',
|
||||||
|
})
|
||||||
|
|
||||||
|
const user = computed(() => sessionUser.data || null)
|
||||||
|
const isLoggedIn = computed(() => !!user.value)
|
||||||
|
|
||||||
|
const login = createResource({
|
||||||
|
url: 'login',
|
||||||
|
onError() {
|
||||||
|
throw new Error('Invalid email or password')
|
||||||
|
},
|
||||||
|
onSuccess() {
|
||||||
|
router.replace({ path: '/' })
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const logout = createResource({
|
||||||
|
url: 'logout',
|
||||||
|
onSuccess() {
|
||||||
|
router.replace({ name: 'Login' })
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
async function init() {
|
||||||
|
try {
|
||||||
|
await sessionUser.fetch()
|
||||||
|
} catch {
|
||||||
|
sessionUser.data = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
user,
|
||||||
|
isLoggedIn,
|
||||||
|
login,
|
||||||
|
logout,
|
||||||
|
init,
|
||||||
|
}
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user