Skip to content

Commit a745c59

Browse files
committed
feat: enhance SystemSettingsPage with improved config handling and state management
1 parent 19825c2 commit a745c59

1 file changed

Lines changed: 36 additions & 7 deletions

File tree

web/src/pages/SystemSettingsPage/SystemSettingsPage.tsx

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,30 @@ const THEME_KEYS = {
4343
CSS: 'THEME_CUSTOM_CSS',
4444
};
4545

46+
const CONFIG_DEFAULTS: Record<string, string> = {
47+
...Object.fromEntries(APP_CONFIG_KEYS.map(({ key, default: def }) => [key, def ?? ''])),
48+
APP_DEFAULT_LANGUAGE: 'zh',
49+
AUTH_ALLOW_REGISTER: 'false',
50+
AUTH_DEFAULT_REGISTER_ROLE_ID: '',
51+
DEFAULT_FILE_VIEW_MODE: 'grid',
52+
[THEME_KEYS.MODE]: 'light',
53+
[THEME_KEYS.PRIMARY]: '#111111',
54+
[THEME_KEYS.RADIUS]: '10',
55+
[THEME_KEYS.TOKENS]: '',
56+
[THEME_KEYS.CSS]: '',
57+
WEBDAV_MAPPING_ENABLED: '1',
58+
S3_MAPPING_ENABLED: '1',
59+
S3_MAPPING_BUCKET: 'foxel',
60+
S3_MAPPING_REGION: '',
61+
S3_MAPPING_BASE_PATH: '/',
62+
S3_MAPPING_ACCESS_KEY: '',
63+
S3_MAPPING_SECRET_KEY: '',
64+
EMAIL_CONFIG: '',
65+
EMAIL_PASSWORD_RESET_TEMPLATE: '',
66+
};
67+
68+
const stringifyConfigValue = (value: unknown) => String(value ?? '');
69+
4670
export default function SystemSettingsPage({ tabKey, onTabNavigate }: SystemSettingsPageProps) {
4771
const [loading, setLoading] = useState(false);
4872
const [config, setConfigState] = useState<Record<string, string> | null>(null);
@@ -69,16 +93,21 @@ export default function SystemSettingsPage({ tabKey, onTabNavigate }: SystemSett
6993
const handleSave = async (values: Record<string, unknown>): Promise<boolean> => {
7094
setLoading(true);
7195
try {
72-
for (const [key, value] of Object.entries(values)) {
73-
await setConfig(key, String(value ?? ''));
96+
const currentConfig = config ?? {};
97+
const changedValues = Object.fromEntries(
98+
Object.entries(values)
99+
.map(([key, value]) => [key, stringifyConfigValue(value)] as const)
100+
.filter(([key, value]) => value !== (currentConfig[key] ?? CONFIG_DEFAULTS[key] ?? '')),
101+
) as Record<string, string>;
102+
103+
for (const [key, value] of Object.entries(changedValues)) {
104+
await setConfig(key, value);
74105
}
106+
75107
message.success(t('Saved successfully'));
76-
const stringValues = Object.fromEntries(
77-
Object.entries(values).map(([key, value]) => [key, String(value ?? '')]),
78-
) as Record<string, string>;
79-
setConfigState((prev) => ({ ...(prev ?? {}), ...stringValues }));
108+
setConfigState((prev) => ({ ...(prev ?? {}), ...changedValues }));
80109
// trigger theme refresh if related keys changed
81-
if (Object.keys(values).some(k => Object.values(THEME_KEYS).includes(k))) {
110+
if (Object.keys(changedValues).some(k => Object.values(THEME_KEYS).includes(k))) {
82111
await refreshTheme();
83112
}
84113
return true;

0 commit comments

Comments
 (0)