diff --git a/app/soapbox/actions/remote_timeline.js b/app/soapbox/actions/remote_timeline.js new file mode 100644 index 000000000..65ec69e82 --- /dev/null +++ b/app/soapbox/actions/remote_timeline.js @@ -0,0 +1,24 @@ +import { getSettings, changeSetting } from 'soapbox/actions/settings'; + +const getPinnedPosts = state => { + const settings = getSettings(state); + return settings.getIn(['remote_timeline', 'pinnedHosts']); +}; + +export function pinHost(host) { + return (dispatch, getState) => { + const state = getState(); + const pinnedHosts = getPinnedPosts(state); + + return dispatch(changeSetting(['remote_timeline', 'pinnedHosts'], pinnedHosts.add(host))); + }; +} + +export function unpinHost(host) { + return (dispatch, getState) => { + const state = getState(); + const pinnedHosts = getPinnedPosts(state); + + return dispatch(changeSetting(['remote_timeline', 'pinnedHosts'], pinnedHosts.delete(host))); + }; +} diff --git a/app/soapbox/actions/settings.js b/app/soapbox/actions/settings.js index 5beba817a..47b153ee7 100644 --- a/app/soapbox/actions/settings.js +++ b/app/soapbox/actions/settings.js @@ -1,7 +1,7 @@ import { debounce } from 'lodash'; import { showAlertForError } from './alerts'; import { patchMe } from 'soapbox/actions/me'; -import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet } from 'immutable'; import { isLoggedIn } from 'soapbox/utils/auth'; import uuid from '../uuid'; import { createSelector } from 'reselect'; @@ -143,6 +143,10 @@ export const defaultSettings = ImmutableMap({ ImmutableMap({ id: 'HOME', uuid: uuid(), params: {} }), ImmutableMap({ id: 'NOTIFICATIONS', uuid: uuid(), params: {} }), ]), + + remote_timeline: ImmutableMap({ + pinnedHosts: ImmutableOrderedSet(), + }), }); export const getSettings = createSelector([