From 5781d0de07aae5669d21a9b416b18aca54fc35d6 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Apr 2020 16:10:07 -0500 Subject: [PATCH] Add preferences reducer --- .../reducers/__tests__/preferences-test.js | 29 +++++++++++++ app/gabsocial/reducers/index.js | 2 + app/gabsocial/reducers/preferences.js | 41 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 app/gabsocial/reducers/__tests__/preferences-test.js create mode 100644 app/gabsocial/reducers/preferences.js diff --git a/app/gabsocial/reducers/__tests__/preferences-test.js b/app/gabsocial/reducers/__tests__/preferences-test.js new file mode 100644 index 000000000..36df57c4b --- /dev/null +++ b/app/gabsocial/reducers/__tests__/preferences-test.js @@ -0,0 +1,29 @@ +import { mastoPrefsToMap } from '../preferences'; +import { Map as ImmutableMap } from 'immutable'; + +describe('mastoPrefToMap', () => { + const prefs = { + 'posting:default:visibility': 'public', + 'posting:default:sensitive': false, + 'posting:default:language': null, + 'reading:expand:media': 'default', + 'reading:expand:spoilers': false, + }; + it('returns a map', () => { + expect(mastoPrefsToMap(prefs)).toEqual(ImmutableMap({ + posting: ImmutableMap({ + default: ImmutableMap({ + visibility: 'public', + sensitive: false, + language: null, + }), + }), + reading: ImmutableMap({ + expand: ImmutableMap({ + media: 'default', + spoilers: false, + }), + }), + })); + }); +}); diff --git a/app/gabsocial/reducers/index.js b/app/gabsocial/reducers/index.js index c91f2f0cb..b96d12e3f 100644 --- a/app/gabsocial/reducers/index.js +++ b/app/gabsocial/reducers/index.js @@ -42,6 +42,7 @@ import soapbox from './soapbox'; import instance from './instance'; import me from './me'; import auth from './auth'; +import preferences from './preferences'; const reducers = { dropdown_menu, @@ -87,6 +88,7 @@ const reducers = { instance, me, auth, + preferences, }; export default combineReducers(reducers); diff --git a/app/gabsocial/reducers/preferences.js b/app/gabsocial/reducers/preferences.js new file mode 100644 index 000000000..b4bba8f1f --- /dev/null +++ b/app/gabsocial/reducers/preferences.js @@ -0,0 +1,41 @@ +import { MASTO_PREFS_FETCH_SUCCESS, FE_NAME } from 'gabsocial/actions/preferences'; +import { ME_FETCH_SUCCESS } from 'gabsocial/actions/me'; + +import { Map as ImmutableMap, fromJS } from 'immutable'; + +const initialState = ImmutableMap({ + posting: ImmutableMap({ + default: ImmutableMap({ + visibility: 'public', + sensitive: false, + language: null, + }), + }), + reading: ImmutableMap({ + expand: ImmutableMap({ + media: 'default', + spoilers: false, + }), + }), +}); + +export function mastoPrefsToMap(prefs) { + let map = ImmutableMap(); + for (const [key, value] of Object.entries(prefs)) { + map = map.setIn(key.split(':'), value); + } + return map; +} + +export default function preferences(state = initialState, action) { + switch(action.type) { + case MASTO_PREFS_FETCH_SUCCESS: + return state.merge(mastoPrefsToMap(action.prefs)); + case ME_FETCH_SUCCESS: + const me = fromJS(action.me); + const fePrefs = me.getIn(['pleroma', 'settings_store', FE_NAME]); + return state.merge(fePrefs); + default: + return state; + } +}