feat: enhance configuration fetching and implement retry logic for API requests
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@ interface AppConfig extends ConfigData {
|
|||||||
let configCache: ConfigData | null = null;
|
let configCache: ConfigData | null = null;
|
||||||
let configPromise: Promise<ConfigData> | null = null;
|
let configPromise: Promise<ConfigData> | null = null;
|
||||||
|
|
||||||
async function fetchConfig(): Promise<ConfigData> {
|
export async function fetchConfig(): Promise<ConfigData> {
|
||||||
// Return cached config if available
|
// Return cached config if available
|
||||||
if (configCache) {
|
if (configCache) {
|
||||||
return configCache;
|
return configCache;
|
||||||
|
|||||||
+18
-5
@@ -8,6 +8,7 @@ import { useVacationStore } from './vacation-store';
|
|||||||
import { useCalendarStore } from './calendar-store';
|
import { useCalendarStore } from './calendar-store';
|
||||||
import { useFilterStore } from './filter-store';
|
import { useFilterStore } from './filter-store';
|
||||||
import { useSettingsStore } from './settings-store';
|
import { useSettingsStore } from './settings-store';
|
||||||
|
import { fetchConfig } from '@/hooks/use-config';
|
||||||
import { debug } from '@/lib/debug';
|
import { debug } from '@/lib/debug';
|
||||||
import type { Identity } from '@/lib/jmap/types';
|
import type { Identity } from '@/lib/jmap/types';
|
||||||
|
|
||||||
@@ -163,10 +164,13 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
error: null,
|
error: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sync settings from server
|
// Sync settings from server (only if enabled)
|
||||||
|
fetchConfig().then(config => {
|
||||||
|
if (!config.settingsSyncEnabled) return;
|
||||||
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
||||||
useSettingsStore.getState().enableSync(username, serverUrl);
|
useSettingsStore.getState().enableSync(username, serverUrl);
|
||||||
});
|
});
|
||||||
|
}).catch(() => {});
|
||||||
|
|
||||||
if (rememberMe) {
|
if (rememberMe) {
|
||||||
try {
|
try {
|
||||||
@@ -242,10 +246,13 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
|
|
||||||
scheduleRefresh(expires_in, get().refreshAccessToken);
|
scheduleRefresh(expires_in, get().refreshAccessToken);
|
||||||
|
|
||||||
// Sync settings from server
|
// Sync settings from server (only if enabled)
|
||||||
|
fetchConfig().then(config => {
|
||||||
|
if (!config.settingsSyncEnabled) return;
|
||||||
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
||||||
useSettingsStore.getState().enableSync(username, serverUrl);
|
useSettingsStore.getState().enableSync(username, serverUrl);
|
||||||
});
|
});
|
||||||
|
}).catch(() => {});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -393,10 +400,13 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
accessToken: token,
|
accessToken: token,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sync settings from server
|
// Sync settings from server (only if enabled)
|
||||||
useSettingsStore.getState().loadFromServer(state.username || '', state.serverUrl).finally(() => {
|
fetchConfig().then(config => {
|
||||||
|
if (!config.settingsSyncEnabled) return;
|
||||||
|
useSettingsStore.getState().loadFromServer(state.username || '', state.serverUrl!).finally(() => {
|
||||||
useSettingsStore.getState().enableSync(state.username || '', state.serverUrl!);
|
useSettingsStore.getState().enableSync(state.username || '', state.serverUrl!);
|
||||||
});
|
});
|
||||||
|
}).catch(() => {});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -436,10 +446,13 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
authMode: 'basic',
|
authMode: 'basic',
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sync settings from server
|
// Sync settings from server (only if enabled)
|
||||||
|
fetchConfig().then(config => {
|
||||||
|
if (!config.settingsSyncEnabled) return;
|
||||||
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
|
||||||
useSettingsStore.getState().enableSync(username, serverUrl);
|
useSettingsStore.getState().enableSync(username, serverUrl);
|
||||||
});
|
});
|
||||||
|
}).catch(() => {});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user