Files
lms/frontend/src/stores/session.js
2024-08-05 18:14:35 +05:30

71 lines
1.4 KiB
JavaScript

import { defineStore } from 'pinia'
import { createResource } from 'frappe-ui'
import { usersStore } from './user'
import router from '@/router'
import { ref, computed } from 'vue'
export const sessionStore = defineStore('lms-session', () => {
let { userResource, allUsers } = usersStore()
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())
if (user) {
allUsers.reload()
}
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.reload()
},
})
const branding = createResource({
url: 'lms.lms.api.get_branding',
cache: 'brand',
auto: true,
onSuccess(data) {
document.querySelector("link[rel='icon']").href = data.favicon
},
})
const sidebarSettings = createResource({
url: 'lms.lms.api.get_sidebar_settings',
cache: 'Sidebar Settings',
auto: false,
})
return {
user,
isLoggedIn,
login,
logout,
branding,
sidebarSettings,
}
})