Refactor settings system and improve context initialization
Backend: - Add type validation and coercion for settings API - Implement SettingStorage and SettingType in registry - Improve CRUD operations for settings Frontend: - Refactor Theme, Language, Sidebar, ViewMode contexts - Simplify admin components (GeneralTab, SettingsTab, UsersTab) - Add new settings endpoints to API client - Improve App initialization flow Infrastructure: - Update Dockerfile and docker-compose.yml - Add .dockerignore - Update Makefile and README 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -44,13 +44,18 @@ export const authAPI = {
|
||||
|
||||
// Settings endpoints
|
||||
export const settingsAPI = {
|
||||
getTheme: async (): Promise<Record<string, string>> => {
|
||||
const response = await api.get<Record<string, string>>('/settings/theme');
|
||||
getTheme: async (): Promise<Record<string, unknown>> => {
|
||||
const response = await api.get<Record<string, unknown>>('/settings/theme');
|
||||
return response.data;
|
||||
},
|
||||
|
||||
updateTheme: async (data: Record<string, string>): Promise<Record<string, string>> => {
|
||||
const response = await api.put<Record<string, string>>('/settings/theme', data);
|
||||
getThemePublic: async (): Promise<Record<string, unknown>> => {
|
||||
const response = await api.get<Record<string, unknown>>('/settings/theme/public');
|
||||
return response.data;
|
||||
},
|
||||
|
||||
updateTheme: async (data: Record<string, unknown>): Promise<Record<string, unknown>> => {
|
||||
const response = await api.put<Record<string, unknown>>('/settings/theme', data);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
@@ -63,6 +68,37 @@ export const settingsAPI = {
|
||||
const response = await api.put<Record<string, boolean>>('/settings/modules', data);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
getUi: async (): Promise<Record<string, unknown>> => {
|
||||
const response = await api.get<Record<string, unknown>>('/settings/ui');
|
||||
return response.data;
|
||||
},
|
||||
|
||||
getAllSettings: async (): Promise<Record<string, unknown>> => {
|
||||
const response = await api.get<Record<string, unknown>>('/settings');
|
||||
return response.data;
|
||||
},
|
||||
|
||||
updateSetting: async (key: string, value: unknown): Promise<{ key: string; value: unknown; updated_at: string }> => {
|
||||
const response = await api.put<{ key: string; value: unknown; updated_at: string }>(`/settings/${key}`, { value });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
getUserModeEnabled: async (): Promise<boolean> => {
|
||||
const response = await api.get<{ key: string; value: unknown }>('/settings/user_mode_enabled');
|
||||
const value = response.data?.value;
|
||||
if (value === true || value === 'true' || value === 'True' || value === 1 || value === '1') return true;
|
||||
if (value === false || value === 'false' || value === 'False' || value === 0 || value === '0') return false;
|
||||
return false;
|
||||
},
|
||||
|
||||
updateUserModeEnabled: async (enabled: boolean): Promise<boolean> => {
|
||||
const response = await api.put<{ key: string; value: unknown }>('/settings/user_mode_enabled', { value: enabled });
|
||||
const value = response.data?.value;
|
||||
if (value === true || value === 'true' || value === 'True' || value === 1 || value === '1') return true;
|
||||
if (value === false || value === 'false' || value === 'False' || value === 0 || value === '0') return false;
|
||||
return false;
|
||||
},
|
||||
};
|
||||
|
||||
// Users endpoints
|
||||
|
||||
Reference in New Issue
Block a user