make preferences work #179

This commit is contained in:
Jon Eugster
2024-03-25 22:23:03 +01:00
parent 27c661f08f
commit 8d0493acb5
13 changed files with 234 additions and 161 deletions
+11 -7
View File
@@ -1,9 +1,10 @@
import React, { useState } from "react";
import { useAppDispatch, useAppSelector } from "../../hooks";
import {
PreferencesState,
setLayout as setPreferencesLayout,
import {
PreferencesState,
setLayout as setPreferencesLayout,
setIsSavePreferences as setPreferencesIsSavePreferences,
setLanguage as setLanguagePreferences,
getWindowDimensions,
AUTO_SWITCH_THRESHOLD
} from "../preferences";
@@ -19,6 +20,9 @@ const UsePreferences = () => {
const isSavePreferences = useAppSelector((state) => state.preferences.isSavePreferences);
const setIsSavePreferences = (isSave: boolean) => dispatch(setPreferencesIsSavePreferences(isSave))
const language = useAppSelector((state) => state.preferences.language);
const setLanguage = (lang: string) => dispatch(setLanguagePreferences(lang))
const automaticallyAdjustLayout = () => {
const {width} = getWindowDimensions()
setMobile(width < AUTO_SWITCH_THRESHOLD)
@@ -28,14 +32,14 @@ const UsePreferences = () => {
if (layout === "auto"){
void automaticallyAdjustLayout()
window.addEventListener('resize', automaticallyAdjustLayout)
return () => window.removeEventListener('resize', automaticallyAdjustLayout)
} else {
setMobile(layout === "mobile")
}
}, [layout])
return {mobile, layout, isSavePreferences, setLayout, setIsSavePreferences}
}
return {mobile, layout, isSavePreferences, language, setLayout, setIsSavePreferences, setLanguage}
}
export default UsePreferences;
export default UsePreferences;
+7 -2
View File
@@ -5,6 +5,7 @@ import { loadPreferences, removePreferences, savePreferences } from "./local_sto
export interface PreferencesState {
layout: "mobile" | "auto" | "desktop";
isSavePreferences: boolean;
language: string;
}
export function getWindowDimensions() {
@@ -16,7 +17,8 @@ export const AUTO_SWITCH_THRESHOLD = 800
const initialState: PreferencesState = loadPreferences() ??{
layout: "auto",
isSavePreferences: false
isSavePreferences: false,
language: "en",
}
export const preferencesSlice = createSlice({
@@ -29,7 +31,10 @@ export const preferencesSlice = createSlice({
setIsSavePreferences: (state, action) => {
state.isSavePreferences = action.payload;
},
setLanguage: (state, action) => {
state.language = action.payload;
},
},
});
export const { setLayout, setIsSavePreferences } = preferencesSlice.actions;
export const { setLayout, setIsSavePreferences, setLanguage } = preferencesSlice.actions;