Skip to content

Commit 5eecd58

Browse files
fix: enable extract and set user settings manually (#629)
1 parent 359e0a2 commit 5eecd58

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

src/services/settings.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export type SettingsObject = Record<string, unknown>;
2323
const USE_LOCAL_STORAGE_FOR_SETTINGS_KEY = 'useLocalStorageForSettings';
2424

2525
/** User settings keys and their default values */
26-
const DEFAULT_USER_SETTINGS: SettingsObject = {
26+
export const DEFAULT_USER_SETTINGS: SettingsObject = {
2727
[THEME_KEY]: 'system',
2828
[LANGUAGE_KEY]: undefined,
2929
[INVERTED_DISKS_KEY]: false,
@@ -59,20 +59,13 @@ class SettingsManager {
5959
}
6060
}
6161

62-
/**
63-
* User settings - settings stored in LS or external store
64-
*/
65-
getUserSettings() {
66-
return this.extractSettingsFromLS();
67-
}
68-
6962
/**
7063
* Returns parsed settings value.
7164
* If value cannot be parsed, returns initially stored string.
7265
* If there is no value, return default value
7366
*/
7467
readUserSettingsValue(key: string, defaultValue?: unknown) {
75-
return this.readValueFromLS(key) ?? defaultValue ?? DEFAULT_USER_SETTINGS[key];
68+
return this.readValueFromLS(key) ?? defaultValue;
7669
}
7770

7871
/**
@@ -82,8 +75,11 @@ class SettingsManager {
8275
return this.setValueToLS(key, value);
8376
}
8477

85-
private extractSettingsFromLS = () => {
86-
return Object.entries(DEFAULT_USER_SETTINGS).reduce<SettingsObject>((acc, [key, value]) => {
78+
/**
79+
* Extract values by provided settings object
80+
*/
81+
extractSettingsFromLS = (settings: SettingsObject) => {
82+
return Object.entries(settings).reduce<SettingsObject>((acc, [key, value]) => {
8783
acc[key] = this.readUserSettingsValue(key, value);
8884
return acc;
8985
}, {});

src/store/reducers/settings/settings.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type {Reducer} from 'redux';
22
import type {ThunkAction} from 'redux-thunk';
33

44
import '../../../services/api';
5-
import {settingsManager} from '../../../services/settings';
5+
import {DEFAULT_USER_SETTINGS, SettingsObject, settingsManager} from '../../../services/settings';
66

77
import type {RootState} from '..';
88
import type {
@@ -15,13 +15,14 @@ import type {
1515

1616
const CHANGE_PROBLEM_FILTER = 'settings/CHANGE_PROBLEM_FILTER';
1717
export const SET_SETTING_VALUE = 'settings/SET_VALUE';
18+
export const SET_USER_SETTINGS = 'settings/SET_USER_SETTINGS';
1819

1920
export const ProblemFilterValues = {
2021
ALL: 'All',
2122
PROBLEMS: 'With problems',
2223
} as const;
2324

24-
const userSettings = settingsManager.getUserSettings();
25+
const userSettings = settingsManager.extractSettingsFromLS(DEFAULT_USER_SETTINGS);
2526
const systemSettings = window.systemSettings || {};
2627

2728
export const initialState = {
@@ -49,7 +50,15 @@ const settings: Reducer<SettingsState, SettingsAction> = (state = initialState,
4950
userSettings: newSettings,
5051
};
5152
}
52-
53+
case SET_USER_SETTINGS: {
54+
return {
55+
...state,
56+
userSettings: {
57+
...state.userSettings,
58+
...action.data,
59+
},
60+
};
61+
}
5362
default:
5463
return state;
5564
}
@@ -66,6 +75,10 @@ export const setSettingValue = (
6675
};
6776
};
6877

78+
export const setUserSettings = (data: SettingsObject) => {
79+
return {type: SET_USER_SETTINGS, data} as const;
80+
};
81+
6982
export const getSettingValue = (state: SettingsRootStateSlice, name: string) => {
7083
return state.settings.userSettings[name];
7184
};

src/store/reducers/settings/types.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type {ValueOf} from '../../../types/common';
22
import type {SettingsObject} from '../../../services/settings';
3-
import {changeFilter, ProblemFilterValues, SET_SETTING_VALUE} from './settings';
3+
import {changeFilter, setUserSettings, ProblemFilterValues, SET_SETTING_VALUE} from './settings';
44

55
export type ProblemFilterValue = ValueOf<typeof ProblemFilterValues>;
66

@@ -15,7 +15,10 @@ export type SetSettingValueAction = {
1515
data: {name: string; value: unknown};
1616
};
1717

18-
export type SettingsAction = ReturnType<typeof changeFilter> | SetSettingValueAction;
18+
export type SettingsAction =
19+
| ReturnType<typeof changeFilter>
20+
| ReturnType<typeof setUserSettings>
21+
| SetSettingValueAction;
1922

2023
export interface SettingsRootStateSlice {
2124
settings: SettingsState;

0 commit comments

Comments
 (0)