Remove MobileContext and use PreferencesContext instead

This commit is contained in:
ran
2024-01-23 22:59:43 +08:00
parent ab98eaa3ba
commit 9d4a6df139
10 changed files with 65 additions and 57 deletions
+41
View File
@@ -0,0 +1,41 @@
import React, { useState } from "react";
import { useAppDispatch, useAppSelector } from "../../hooks";
import {
PreferencesState,
setLayout as setPreferencesLayout,
setIsSavePreferences as setPreferencesIsSavePreferences,
getWindowDimensions,
AUTO_SWITCH_THRESHOLD
} from "../preferences";
const UsePreferences = () => {
const dispatch = useAppDispatch()
const [mobile, setMobile] = React.useState<boolean>()
const layout = useAppSelector((state) => state.preferences.layout);
const setLayout = (layout: PreferencesState["layout"]) => dispatch(setPreferencesLayout(layout))
const isSavePreferences = useAppSelector((state) => state.preferences.isSavePreferences);
const setIsSavePreferences = (isSave: boolean) => dispatch(setPreferencesIsSavePreferences(isSave))
const automaticallyAdjustLayout = () => {
const {width} = getWindowDimensions()
setMobile(width < AUTO_SWITCH_THRESHOLD)
}
React.useEffect(()=>{
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}
}
export default UsePreferences;
+2 -2
View File
@@ -26,10 +26,10 @@ export const preferencesSlice = createSlice({
setLayout: (state, action) => {
state.layout = action.payload;
},
setisSavePreferences: (state, action) => {
setIsSavePreferences: (state, action) => {
state.isSavePreferences = action.payload;
},
},
});
export const { setLayout, setisSavePreferences } = preferencesSlice.actions;
export const { setLayout, setIsSavePreferences } = preferencesSlice.actions;