94 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 | 
						|
`actions/local_settings`
 | 
						|
========================
 | 
						|
 | 
						|
>   For more information on the contents of this file, please contact:
 | 
						|
>
 | 
						|
>   - kibigo! [@kibi@glitch.social]
 | 
						|
 | 
						|
This file provides our Redux actions related to local settings. It
 | 
						|
consists of the following:
 | 
						|
 | 
						|
 -  __`changesLocalSetting(key, value)` :__
 | 
						|
    Changes the local setting with the given `key` to the given
 | 
						|
    `value`. `key` **MUST** be an array of strings, as required by
 | 
						|
    `Immutable.Map.prototype.getIn()`.
 | 
						|
 | 
						|
 -  __`saveLocalSettings()` :__
 | 
						|
    Saves the local settings to `localStorage` as a JSON object. We
 | 
						|
    shouldn't ever need to call this ourselves.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
//  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 | 
						|
 | 
						|
/*
 | 
						|
 | 
						|
Constants:
 | 
						|
----------
 | 
						|
 | 
						|
We provide the following constants:
 | 
						|
 | 
						|
 -  __`LOCAL_SETTING_CHANGE` :__
 | 
						|
    This string constant is used to dispatch a setting change to our
 | 
						|
    reducer in `reducers/local_settings`, where the setting is
 | 
						|
    actually changed.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
export const LOCAL_SETTING_CHANGE = 'LOCAL_SETTING_CHANGE';
 | 
						|
 | 
						|
//  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 | 
						|
 | 
						|
/*
 | 
						|
 | 
						|
`changeLocalSetting(key, value)`:
 | 
						|
---------------------------------
 | 
						|
 | 
						|
Changes the local setting with the given `key` to the given `value`.
 | 
						|
`key` **MUST** be an array of strings, as required by
 | 
						|
`Immutable.Map.prototype.getIn()`.
 | 
						|
 | 
						|
To accomplish this, we just dispatch a `LOCAL_SETTING_CHANGE` to our
 | 
						|
reducer in `reducers/local_settings`.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
export function changeLocalSetting(key, value) {
 | 
						|
  return dispatch => {
 | 
						|
    dispatch({
 | 
						|
      type: LOCAL_SETTING_CHANGE,
 | 
						|
      key,
 | 
						|
      value,
 | 
						|
    });
 | 
						|
 | 
						|
    dispatch(saveLocalSettings());
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
//  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 | 
						|
 | 
						|
/*
 | 
						|
 | 
						|
`saveLocalSettings()`:
 | 
						|
----------------------
 | 
						|
 | 
						|
Saves the local settings to `localStorage` as a JSON object.
 | 
						|
`changeLocalSetting()` calls this whenever it changes a setting. We
 | 
						|
shouldn't ever need to call this ourselves.
 | 
						|
 | 
						|
>   __TODO :__
 | 
						|
>   Right now `saveLocalSettings()` doesn't keep track of which user
 | 
						|
>   is currently signed in, but it might be better to give each user
 | 
						|
>   their *own* local settings.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
export function saveLocalSettings() {
 | 
						|
  return (_, getState) => {
 | 
						|
    const localSettings = getState().get('local_settings').toJS();
 | 
						|
    localStorage.setItem('mastodon-settings', JSON.stringify(localSettings));
 | 
						|
  };
 | 
						|
};
 |