refactor phase 6

This commit is contained in:
alorig
2025-11-20 21:47:03 +05:00
parent b0409d965b
commit 45dc0d1fa2
5 changed files with 305 additions and 121 deletions

View File

@@ -18,8 +18,20 @@ import {
AccountSetting,
ModuleSetting,
ModuleEnableSettings,
AccountSettingsError,
} from '../services/api';
const getAccountSettingsErrorMessage = (error: AccountSettingsError): string => {
switch (error.type) {
case 'ACCOUNT_SETTINGS_NOT_FOUND':
return 'No account-level settings have been created yet.';
case 'ACCOUNT_SETTINGS_VALIDATION_ERROR':
return error.message || 'The account settings request contained invalid data.';
default:
return error.message || 'Unexpected error while loading account settings.';
}
};
interface SettingsState {
accountSettings: Record<string, AccountSetting>;
moduleSettings: Record<string, Record<string, ModuleSetting>>;
@@ -58,7 +70,17 @@ export const useSettingsStore = create<SettingsState>()(
});
set({ accountSettings: settingsMap, loading: false });
} catch (error: any) {
set({ error: error.message, loading: false });
if (error instanceof AccountSettingsError) {
const message = getAccountSettingsErrorMessage(error);
// Not found should not be treated as failure just indicate no settings yet
if (error.type === 'ACCOUNT_SETTINGS_NOT_FOUND') {
set({ accountSettings: {}, loading: false, error: null });
} else {
set({ error: message, loading: false });
}
} else {
set({ error: error.message, loading: false });
}
}
},
@@ -69,6 +91,14 @@ export const useSettingsStore = create<SettingsState>()(
accountSettings: { ...state.accountSettings, [key]: setting }
}));
} catch (error: any) {
if (error instanceof AccountSettingsError) {
if (error.type === 'ACCOUNT_SETTINGS_NOT_FOUND') {
// Silently ignore missing setting it just hasn't been created yet
return;
}
set({ error: getAccountSettingsErrorMessage(error) });
return;
}
set({ error: error.message });
}
},
@@ -90,6 +120,11 @@ export const useSettingsStore = create<SettingsState>()(
loading: false
}));
} catch (error: any) {
if (error instanceof AccountSettingsError) {
const message = getAccountSettingsErrorMessage(error);
set({ error: message, loading: false });
throw error;
}
set({ error: error.message, loading: false });
throw error;
}