seitime-frappe/billing/src/session.js
2024-11-16 13:07:48 +05:30

61 lines
1.2 KiB
JavaScript

import { createResource } from 'frappe-ui'
import router from '@/router'
import { ref, computed } from 'vue'
let user = ref(null)
const isLoggedIn = computed(() => !!user.value)
export function getSession() {
function sessionUser() {
let cookies = new URLSearchParams(document.cookie.split('; ').join('&'))
let _sessionUser = cookies.get('user_id')
let _fullName = cookies.get('full_name')
let _imageURL = cookies.get('user_image')
if (_sessionUser === 'Guest') {
_sessionUser = null
}
return {
name: _sessionUser,
fullName: _fullName,
imageURL: _imageURL,
}
}
const isFCSite = createResource({
url: 'frappe.integrations.frappe_providers.frappecloud_billing.is_fc_site',
cache: 'isFCSite',
auto: true,
transform: (data) => Boolean(data),
})
user.value = sessionUser()
const login = createResource({
url: 'login',
onError() {
throw new Error('Invalid email or password')
},
onSuccess() {
user.value = sessionUser()
login.reset()
router.replace({ path: '/' })
},
})
const logout = createResource({
url: 'logout',
onSuccess() {
isFCSite.reload()
user.value = null
window.location.href = '/'
},
})
return {
user,
isLoggedIn,
login,
logout,
isFCSite,
}
}