|
@@ -11,7 +11,7 @@ function storeSettings(settings) {
|
|
|
}
|
|
}
|
|
|
function loadSettings() {
|
|
function loadSettings() {
|
|
|
const settings = localStorage.getItem('settings');
|
|
const settings = localStorage.getItem('settings');
|
|
|
- return (settings && JSON.parse(settings)) || {login:{}, theme:'light', layout:'two-col'};
|
|
|
|
|
|
|
+ return (settings && JSON.parse(settings)) || {login:{}, theme:'light', layout:'two-col', panel:'main'};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function settingsReducer(state, action) {
|
|
function settingsReducer(state, action) {
|
|
@@ -20,14 +20,17 @@ function settingsReducer(state, action) {
|
|
|
case 'LOGIN_SUCCESS':
|
|
case 'LOGIN_SUCCESS':
|
|
|
storeToken(action.payload.token);
|
|
storeToken(action.payload.token);
|
|
|
return {...state, login: {loading: false, error: null}};
|
|
return {...state, login: {loading: false, error: null}};
|
|
|
- case 'LOGIN_INIT': return {...state, login: {loading: true, error: null}};
|
|
|
|
|
- case 'LOGIN_FAIL': return {...state, login: {loading: false, error: action.payload}};
|
|
|
|
|
- case 'LAYOUT_SET': return storeSettings({...state, layout: action.payload});
|
|
|
|
|
- case 'THEME_SET': return storeSettings({...state, theme: action.payload});
|
|
|
|
|
|
|
+ case 'LOGIN_INIT': return {...state, login: {loading: true, error: null}};
|
|
|
|
|
+ case 'LOGIN_FAIL': return {...state, login: {loading: false, error: action.payload}};
|
|
|
|
|
+ case 'LAYOUT_SET': return storeSettings({...state, layout: action.payload});
|
|
|
|
|
+ case 'THEME_SET': return storeSettings({...state, theme: action.payload});
|
|
|
|
|
+ case 'PANEL_SET': return storeSettings({...state, panel: action.payload});
|
|
|
default: throw new Error(`Bad action ${action}`);
|
|
default: throw new Error(`Bad action ${action}`);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const handleRadio = (dispatch, type) => (e) => dispatch({type:`${e.target.name.toUpperCase()}_SET`, payload: e.target.value});
|
|
|
|
|
+
|
|
|
function App() {
|
|
function App() {
|
|
|
const [settings, dispatch] = useReducer(settingsReducer, loadSettings());
|
|
const [settings, dispatch] = useReducer(settingsReducer, loadSettings());
|
|
|
if(!loadToken()) {
|
|
if(!loadToken()) {
|
|
@@ -35,7 +38,13 @@ function App() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
- <div className="App" data-theme={settings.theme} data-layout={settings.layout}>
|
|
|
|
|
|
|
+ <div className="App" data-theme={settings.theme} data-layout={settings.layout} data-panel={settings.panel || 'main'}>
|
|
|
|
|
+ <div className="App-panels">
|
|
|
|
|
+ <input id="panel-main" type="radio" name="panel" value="main" checked={settings.panel === 'main'} onChange={handleRadio(dispatch)} />
|
|
|
|
|
+ <input id="panel-side" type="radio" name="panel" value="side" checked={settings.panel === 'side'} onChange={handleRadio(dispatch)} />
|
|
|
|
|
+ <label htmlFor="panel-main">Browse</label>
|
|
|
|
|
+ <label htmlFor="panel-side">Queue</label>
|
|
|
|
|
+ </div>
|
|
|
<Header settings={settings} dispatch={dispatch} />
|
|
<Header settings={settings} dispatch={dispatch} />
|
|
|
<Player />
|
|
<Player />
|
|
|
</div>
|
|
</div>
|