import { login as loginApi, LoginRequest, logout as logoutApi } from '@/portal/api/login' import { clearStore, getStore, setStore } from 'common/utils/web-store' import { isEmpty } from 'common/utils/validate' import { SESSION_STORE, USER_STORE } from '../utils/consts' import router from 'common/utils/router' import { defineStore } from 'pinia' import { computed, reactive, toRefs } from 'vue-demi' interface SessionInfo { [key: string]: unknown } interface UserInfo { eCIFID: string } export const useLoginStore = defineStore('portal-login', () => { const state = reactive({ sessionInfo: getStore(SESSION_STORE), userInfo: getStore(USER_STORE) }) const loginStaus = computed(() => !isEmpty(state.userInfo?.eCIFID)) async function login (data: LoginRequest) { const response = await loginApi(data) state.sessionInfo = {} state.userInfo = response setStore(SESSION_STORE, state.sessionInfo) setStore(USER_STORE, state.userInfo) router.push('/home') } async function logout () { await logoutApi() state.sessionInfo = undefined state.userInfo = undefined clearStore(SESSION_STORE) clearStore(USER_STORE) router.push('/login') } return { ...toRefs(state), loginStaus, login, logout } })