mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
import type { Actions, State } from './types' |
|
import { message, useNuxtApp } from '#imports' |
|
|
|
export function useGlobalActions(state: State): Actions { |
|
const setIsMobileMode = (isMobileMode: boolean) => { |
|
state.isMobileMode.value = isMobileMode |
|
} |
|
|
|
/** Sign out by deleting the token from localStorage */ |
|
const signOut: Actions['signOut'] = () => { |
|
state.token.value = null |
|
state.user.value = null |
|
} |
|
|
|
/** Sign in by setting the token in localStorage */ |
|
const signIn: Actions['signIn'] = async (newToken) => { |
|
state.token.value = newToken |
|
|
|
if (state.jwtPayload.value) { |
|
state.user.value = { |
|
id: state.jwtPayload.value.id, |
|
email: state.jwtPayload.value.email, |
|
firstname: state.jwtPayload.value.firstname, |
|
lastname: state.jwtPayload.value.lastname, |
|
roles: state.jwtPayload.value.roles, |
|
} |
|
} |
|
} |
|
|
|
/** manually try to refresh token */ |
|
const refreshToken = async () => { |
|
const nuxtApp = useNuxtApp() |
|
const t = nuxtApp.vueApp.i18n.global.t |
|
|
|
return new Promise((resolve) => { |
|
nuxtApp.$api.instance |
|
.post('/auth/token/refresh', null, { |
|
withCredentials: true, |
|
}) |
|
.then((response) => { |
|
if (response.data?.token) { |
|
signIn(response.data.token) |
|
} |
|
}) |
|
.catch((err) => { |
|
message.error(err.message || t('msg.error.youHaveBeenSignedOut')) |
|
signOut() |
|
}) |
|
.finally(resolve) |
|
}) |
|
} |
|
|
|
const loadAppInfo = async () => { |
|
try { |
|
const nuxtApp = useNuxtApp() |
|
state.appInfo.value = await nuxtApp.$api.utils.appInfo() |
|
} catch (e) { |
|
console.error(e) |
|
} |
|
} |
|
|
|
return { signIn, signOut, refreshToken, loadAppInfo, setIsMobileMode } |
|
}
|
|
|