crm/frontend/src/stores/session.js
2024-11-16 21:19:08 +05:30

49 lines
1.1 KiB
JavaScript

import { defineStore } from 'pinia'
import { createResource } from 'frappe-ui'
import { userResource } from './user'
import router from '@/router'
import { ref, computed } from 'vue'
export const sessionStore = defineStore('crm-session', () => {
function sessionUser() {
let cookies = new URLSearchParams(document.cookie.split('; ').join('&'))
let _sessionUser = cookies.get('user_id')
if (_sessionUser === 'Guest') {
_sessionUser = null
}
return _sessionUser
}
let user = ref(sessionUser())
const isLoggedIn = computed(() => !!user.value)
const login = createResource({
url: 'login',
onError() {
throw new Error('Invalid email or password')
},
onSuccess() {
userResource.reload()
user.value = sessionUser()
login.reset()
router.replace({ path: '/' })
},
})
const logout = createResource({
url: 'logout',
onSuccess() {
userResource.reset()
user.value = null
window.location.href = '/login?redirect-to=/crm'
},
})
return {
user,
isLoggedIn,
login,
logout,
}
})