docs(changeset): feat(error-manager): implement centralized error reporting system
This commit is contained in:
@@ -5,7 +5,6 @@ import { useStoreWithEqualityFn } from 'zustand/traditional';
|
||||
import { createStore } from 'zustand/vanilla';
|
||||
|
||||
import type {
|
||||
AppState,
|
||||
BarState,
|
||||
ExtractState,
|
||||
GlobalState,
|
||||
@@ -21,10 +20,6 @@ import type {
|
||||
import { loadStorage, saveStorage } from './GlobalStateStore.utils';
|
||||
|
||||
const initialState: GlobalState = {
|
||||
app: {
|
||||
controls: {},
|
||||
environment: 'production',
|
||||
},
|
||||
layout: {
|
||||
bottomBar: { open: false },
|
||||
leftBar: { open: false },
|
||||
@@ -35,10 +30,14 @@ const initialState: GlobalState = {
|
||||
menu: [],
|
||||
},
|
||||
owner: {
|
||||
guid: '',
|
||||
id: 0,
|
||||
name: '',
|
||||
},
|
||||
program: {
|
||||
controls: {},
|
||||
environment: 'production',
|
||||
guid: '',
|
||||
name: '',
|
||||
slug: '',
|
||||
},
|
||||
@@ -47,8 +46,10 @@ const initialState: GlobalState = {
|
||||
authToken: '',
|
||||
connected: true,
|
||||
loading: false,
|
||||
loggedIn: false,
|
||||
},
|
||||
user: {
|
||||
guid: '',
|
||||
username: '',
|
||||
},
|
||||
};
|
||||
@@ -140,13 +141,6 @@ const createNavigationSlice = (set: SetState) => ({
|
||||
})),
|
||||
});
|
||||
|
||||
const createAppSlice = (set: SetState) => ({
|
||||
setApp: (updates: Partial<AppState>) =>
|
||||
set((state: GlobalState) => ({
|
||||
app: { ...state.app, ...updates },
|
||||
})),
|
||||
});
|
||||
|
||||
const createComplexActions = (set: SetState, get: GetState) => ({
|
||||
fetchData: async (url?: string) => {
|
||||
try {
|
||||
@@ -164,9 +158,9 @@ const createComplexActions = (set: SetState, get: GetState) => ({
|
||||
set((state: GlobalState) => ({
|
||||
...state,
|
||||
...result,
|
||||
app: {
|
||||
...state.app,
|
||||
...result?.app,
|
||||
program: {
|
||||
...state.program,
|
||||
...result?.program,
|
||||
updatedAt: new Date().toISOString(),
|
||||
},
|
||||
session: {
|
||||
@@ -188,25 +182,101 @@ const createComplexActions = (set: SetState, get: GetState) => ({
|
||||
}
|
||||
},
|
||||
|
||||
isLoggedIn: (): boolean => {
|
||||
const session = get().session;
|
||||
if (!session.loggedIn || !session.authToken) {
|
||||
return false;
|
||||
}
|
||||
if (session.expiryDate && new Date(session.expiryDate) < new Date()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
login: async (authToken?: string) => {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
authToken: authToken ?? '',
|
||||
},
|
||||
}));
|
||||
await get().fetchData();
|
||||
try {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
authToken: authToken ?? '',
|
||||
expiryDate: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
|
||||
loading: true,
|
||||
loggedIn: true,
|
||||
},
|
||||
}));
|
||||
await get().fetchData();
|
||||
const currentState = get();
|
||||
const result = await currentState.onLogin?.(currentState);
|
||||
if (result) {
|
||||
set((state: GlobalState) => ({
|
||||
...state,
|
||||
owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,
|
||||
program: result.program ? { ...state.program, ...result.program } : state.program,
|
||||
session: result.session ? { ...state.session, ...result.session } : state.session,
|
||||
user: result.user ? { ...state.user, ...result.user } : state.user,
|
||||
}));
|
||||
}
|
||||
} catch (e) {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
connected: false,
|
||||
error: `Login Exception: ${String(e)}`,
|
||||
loading: false,
|
||||
loggedIn: false,
|
||||
},
|
||||
}));
|
||||
} finally {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
loading: false,
|
||||
},
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
logout: async () => {
|
||||
set((state: GlobalState) => ({
|
||||
...initialState,
|
||||
session: {
|
||||
...initialState.session,
|
||||
apiURL: state.session.apiURL,
|
||||
},
|
||||
}));
|
||||
await get().fetchData();
|
||||
try {
|
||||
set((state: GlobalState) => ({
|
||||
...initialState,
|
||||
session: {
|
||||
...initialState.session,
|
||||
apiURL: state.session.apiURL,
|
||||
expiryDate: undefined,
|
||||
loading: true,
|
||||
loggedIn: false,
|
||||
},
|
||||
}));
|
||||
await get().fetchData();
|
||||
const currentState = get();
|
||||
const result = await currentState.onLogout?.(currentState);
|
||||
if (result) {
|
||||
set((state: GlobalState) => ({
|
||||
...state,
|
||||
owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,
|
||||
program: result.program ? { ...state.program, ...result.program } : state.program,
|
||||
session: result.session ? { ...state.session, ...result.session } : state.session,
|
||||
user: result.user ? { ...state.user, ...result.user } : state.user,
|
||||
}));
|
||||
}
|
||||
} catch (e) {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
connected: false,
|
||||
error: `Logout Exception: ${String(e)}`,
|
||||
loading: false,
|
||||
},
|
||||
}));
|
||||
} finally {
|
||||
set((state: GlobalState) => ({
|
||||
session: {
|
||||
...state.session,
|
||||
loading: false,
|
||||
},
|
||||
}));
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -218,7 +288,6 @@ const GlobalStateStore = createStore<GlobalStateStoreType>((set, get) => ({
|
||||
...createUserSlice(set),
|
||||
...createLayoutSlice(set),
|
||||
...createNavigationSlice(set),
|
||||
...createAppSlice(set),
|
||||
...createComplexActions(set, get),
|
||||
}));
|
||||
|
||||
@@ -267,6 +336,10 @@ const getAuthToken = (): string => {
|
||||
return GlobalStateStore.getState().session.authToken;
|
||||
};
|
||||
|
||||
const isLoggedIn = (): boolean => {
|
||||
return GlobalStateStore.getState().isLoggedIn();
|
||||
};
|
||||
|
||||
const setAuthToken = (token: string) => {
|
||||
GlobalStateStore.getState().setAuthToken(token);
|
||||
};
|
||||
@@ -275,4 +348,4 @@ const GetGlobalState = (): GlobalStateStoreType => {
|
||||
return GlobalStateStore.getState();
|
||||
}
|
||||
|
||||
export { getApiURL, getAuthToken, GetGlobalState, GlobalStateStore, setApiURL, setAuthToken, useGlobalStateStore };
|
||||
export { getApiURL, getAuthToken, GetGlobalState, GlobalStateStore, isLoggedIn, setApiURL, setAuthToken, useGlobalStateStore };
|
||||
|
||||
Reference in New Issue
Block a user