Better settings handling with localSettings (new!)
This commit is contained in:
parent
4c37f629bc
commit
da05cde721
20
app/javascript/mastodon/actions/local_settings.js
Normal file
20
app/javascript/mastodon/actions/local_settings.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
export const LOCAL_SETTING_CHANGE = 'LOCAL_SETTING_CHANGE';
|
||||||
|
|
||||||
|
export function changeLocalSetting(key, value) {
|
||||||
|
return dispatch => {
|
||||||
|
dispatch({
|
||||||
|
type: LOCAL_SETTING_CHANGE,
|
||||||
|
key,
|
||||||
|
value,
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch(saveLocalSettings());
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export function saveLocalSettings() {
|
||||||
|
return (_, getState) => {
|
||||||
|
const localSettings = getState().get('localSettings').toJS();
|
||||||
|
localStorage.setItem('mastodon-settings', JSON.stringify(localSettings));
|
||||||
|
};
|
||||||
|
};
|
@ -24,7 +24,11 @@ addLocaleData(localeData);
|
|||||||
|
|
||||||
const store = configureStore();
|
const store = configureStore();
|
||||||
const initialState = JSON.parse(document.getElementById('initial-state').textContent);
|
const initialState = JSON.parse(document.getElementById('initial-state').textContent);
|
||||||
if (localStorage) initialState.layout = localStorage.getItem('mastodon-layout');
|
try {
|
||||||
|
initialState.localSettings = JSON.parse(localStorage.getItem('mastodon-settings'));
|
||||||
|
} catch (e) {
|
||||||
|
initialState.localSettings = {};
|
||||||
|
}
|
||||||
store.dispatch(hydrateStore(initialState));
|
store.dispatch(hydrateStore(initialState));
|
||||||
|
|
||||||
export default class Mastodon extends React.PureComponent {
|
export default class Mastodon extends React.PureComponent {
|
||||||
|
@ -75,7 +75,7 @@ class WrappedRoute extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = state => ({
|
||||||
layout: state.getIn(['settings', 'layout']),
|
layout: state.getIn(['localSettings', 'layout']),
|
||||||
});
|
});
|
||||||
|
|
||||||
@connect(mapStateToProps)
|
@connect(mapStateToProps)
|
||||||
@ -180,19 +180,19 @@ export default class UI extends React.PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { width, draggingOver, layout } = this.state;
|
const { width, draggingOver } = this.state;
|
||||||
const { children } = this.props;
|
const { children, layout } = this.props;
|
||||||
|
|
||||||
const columnsClass = layout => {
|
const columnsClass = layout => {
|
||||||
switch (layout) {
|
switch (layout) {
|
||||||
case 'single':
|
case 'single':
|
||||||
return 'single-column';
|
return 'single-column';
|
||||||
case 'multiple':
|
case 'multiple':
|
||||||
return 'multiple-columns';
|
return 'multi-columns';
|
||||||
default:
|
default:
|
||||||
return 'auto-columns';
|
return 'auto-columns';
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'ui ' + columnsClass(layout)} ref={this.setRef}>
|
<div className={'ui ' + columnsClass(layout)} ref={this.setRef}>
|
||||||
|
@ -14,6 +14,7 @@ import relationships from './relationships';
|
|||||||
import search from './search';
|
import search from './search';
|
||||||
import notifications from './notifications';
|
import notifications from './notifications';
|
||||||
import settings from './settings';
|
import settings from './settings';
|
||||||
|
import localSettings from './local_settings';
|
||||||
import status_lists from './status_lists';
|
import status_lists from './status_lists';
|
||||||
import cards from './cards';
|
import cards from './cards';
|
||||||
import reports from './reports';
|
import reports from './reports';
|
||||||
@ -36,6 +37,7 @@ export default combineReducers({
|
|||||||
search,
|
search,
|
||||||
notifications,
|
notifications,
|
||||||
settings,
|
settings,
|
||||||
|
localSettings,
|
||||||
cards,
|
cards,
|
||||||
reports,
|
reports,
|
||||||
contexts,
|
contexts,
|
||||||
|
20
app/javascript/mastodon/reducers/local_settings.js
Normal file
20
app/javascript/mastodon/reducers/local_settings.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import { LOCAL_SETTING_CHANGE } from '../actions/local_settings';
|
||||||
|
import { STORE_HYDRATE } from '../actions/store';
|
||||||
|
import Immutable from 'immutable';
|
||||||
|
|
||||||
|
const initialState = Immutable.Map({
|
||||||
|
layout: 'auto',
|
||||||
|
});
|
||||||
|
|
||||||
|
const hydrate = (state, localSettings) => state.mergeDeep(localSettings);
|
||||||
|
|
||||||
|
export default function localSettings(state = initialState, action) {
|
||||||
|
switch(action.type) {
|
||||||
|
case STORE_HYDRATE:
|
||||||
|
return hydrate(state, action.state.get('localSettings'));
|
||||||
|
case LOCAL_SETTING_CHANGE:
|
||||||
|
return state.setIn(action.key, action.value);
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user