Settings: pass an opts object instead of showAlert

This commit is contained in:
Alex Gleason
2022-06-22 12:54:36 -05:00
parent c1a0b7a6a8
commit 18df7c0c4a
2 changed files with 16 additions and 10 deletions

View File

@ -17,6 +17,12 @@ const SETTINGS_UPDATE = 'SETTINGS_UPDATE';
const FE_NAME = 'soapbox_fe'; const FE_NAME = 'soapbox_fe';
/** Options when changing/saving settings. */
type SettingOpts = {
/** Whether to display an alert when settings are saved. */
showAlert?: boolean,
}
const messages = defineMessages({ const messages = defineMessages({
saveSuccess: { id: 'settings.save.success', defaultMessage: 'Your preferences have been saved!' }, saveSuccess: { id: 'settings.save.success', defaultMessage: 'Your preferences have been saved!' },
}); });
@ -177,7 +183,7 @@ const getSettings = createSelector([
.mergeDeep(settings); .mergeDeep(settings);
}); });
const changeSettingImmediate = (path: string[], value: any, showAlert = false) => const changeSettingImmediate = (path: string[], value: any, opts?: SettingOpts) =>
(dispatch: AppDispatch) => { (dispatch: AppDispatch) => {
dispatch({ dispatch({
type: SETTING_CHANGE, type: SETTING_CHANGE,
@ -185,10 +191,10 @@ const changeSettingImmediate = (path: string[], value: any, showAlert = false) =
value, value,
}); });
dispatch(saveSettingsImmediate(showAlert)); dispatch(saveSettingsImmediate(opts));
}; };
const changeSetting = (path: string[], value: any, showAlert = false) => const changeSetting = (path: string[], value: any, opts?: SettingOpts) =>
(dispatch: AppDispatch) => { (dispatch: AppDispatch) => {
dispatch({ dispatch({
type: SETTING_CHANGE, type: SETTING_CHANGE,
@ -196,10 +202,10 @@ const changeSetting = (path: string[], value: any, showAlert = false) =>
value, value,
}); });
return dispatch(saveSettings(showAlert)); return dispatch(saveSettings(opts));
}; };
const saveSettingsImmediate = (showAlert = false) => const saveSettingsImmediate = (opts?: SettingOpts) =>
(dispatch: AppDispatch, getState: () => RootState) => { (dispatch: AppDispatch, getState: () => RootState) => {
if (!isLoggedIn(getState)) return; if (!isLoggedIn(getState)) return;
@ -215,7 +221,7 @@ const saveSettingsImmediate = (showAlert = false) =>
})).then(() => { })).then(() => {
dispatch({ type: SETTING_SAVE }); dispatch({ type: SETTING_SAVE });
if (showAlert) { if (opts?.showAlert) {
dispatch(snackbar.success(messages.saveSuccess)); dispatch(snackbar.success(messages.saveSuccess));
} }
}).catch(error => { }).catch(error => {
@ -223,8 +229,8 @@ const saveSettingsImmediate = (showAlert = false) =>
}); });
}; };
const saveSettings = (showAlert = false) => const saveSettings = (opts?: SettingOpts) =>
(dispatch: AppDispatch) => dispatch(saveSettingsImmediate(showAlert)); (dispatch: AppDispatch) => dispatch(saveSettingsImmediate(opts));
export { export {
SETTING_CHANGE, SETTING_CHANGE,

View File

@ -96,11 +96,11 @@ const Preferences = () => {
const settings = useAppSelector((state) => getSettings(state)); const settings = useAppSelector((state) => getSettings(state));
const onSelectChange = (event: React.ChangeEvent<HTMLSelectElement>, path: string[]) => { const onSelectChange = (event: React.ChangeEvent<HTMLSelectElement>, path: string[]) => {
dispatch(changeSetting(path, event.target.value, true)); dispatch(changeSetting(path, event.target.value, { showAlert: true }));
}; };
const onToggleChange = (key: string[], checked: boolean) => { const onToggleChange = (key: string[], checked: boolean) => {
dispatch(changeSetting(key, checked, true)); dispatch(changeSetting(key, checked, { showAlert: true }));
}; };
const displayMediaOptions = React.useMemo(() => ({ const displayMediaOptions = React.useMemo(() => ({