Merge pull request #168 from Wzixiao/mobile-option

Mobile option (template)
This commit is contained in:
Jon Eugster
2023-12-14 21:53:08 +01:00
committed by GitHub
10 changed files with 188 additions and 35 deletions
+21
View File
@@ -36,3 +36,24 @@ export async function saveState(state: any) {
// Ignore
}
}
const PREFERENCES_KEY = "preferences"
/** Load from browser storage */
export function loadPreferences() {
try {
const serializedState = localStorage.getItem(PREFERENCES_KEY);
return JSON.parse(serializedState)
} catch (e) {
return undefined;
}
}
export function savePreferences(state: any) {
try {
const serializedState = JSON.stringify(state)
localStorage.setItem(PREFERENCES_KEY, serializedState);
} catch (e) {
// Ignore
}
}
+37
View File
@@ -0,0 +1,37 @@
import { createSlice } from "@reduxjs/toolkit";
import { loadPreferences } from "./local_storage";
interface PreferencesState {
mobile: boolean;
lockMobile: boolean;
}
export function getWindowDimensions() {
const {innerWidth: width, innerHeight: height } = window
return {width, height}
}
const { width } = getWindowDimensions()
export const AUTO_SWITCH_THRESHOLD = 800
const initialState: PreferencesState = loadPreferences() ?? {
mobile: width < AUTO_SWITCH_THRESHOLD,
lockMobile: false
}
export const preferencesSlice = createSlice({
name: "preferences",
initialState,
reducers: {
setMobile: (state, action) => {
state.mobile = action.payload;
},
setLockMobile: (state, action) => {
state.lockMobile = action.payload;
},
},
});
export const { setMobile, setLockMobile } = preferencesSlice.actions;
+4 -1
View File
@@ -7,13 +7,15 @@ import { debounce } from "debounce";
import { connection } from '../connection'
import { apiSlice } from './api'
import { progressSlice } from './progress'
import { saveState } from "./local_storage";
import { preferencesSlice } from "./preferences"
import { saveState, savePreferences } from "./local_storage";
export const store = configureStore({
reducer: {
[apiSlice.reducerPath]: apiSlice.reducer,
[progressSlice.name]: progressSlice.reducer,
[preferencesSlice.name]: preferencesSlice.reducer,
},
// Make connection available in thunks:
middleware: getDefaultMiddleware =>
@@ -31,6 +33,7 @@ export const store = configureStore({
store.subscribe(
debounce(() => {
saveState(store.getState()[progressSlice.name]);
savePreferences(store.getState()[preferencesSlice.name]);
}, 800)
);