From 9f692ccf619d2cc3172fb0b1a16d3c6223b602ea Mon Sep 17 00:00:00 2001 From: ran Date: Wed, 13 Dec 2023 00:37:50 +0800 Subject: [PATCH] Add basic preference framework and mobile options and Add missing files --- client/src/components/popup/preferences.tsx | 55 +++++++++++++++++++++ client/src/state/preferences.ts | 37 ++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 client/src/components/popup/preferences.tsx create mode 100644 client/src/state/preferences.ts diff --git a/client/src/components/popup/preferences.tsx b/client/src/components/popup/preferences.tsx new file mode 100644 index 0000000..73b2dbe --- /dev/null +++ b/client/src/components/popup/preferences.tsx @@ -0,0 +1,55 @@ +import * as React from 'react' +import { Input, Typography } from '@mui/material' +import Markdown from '../markdown' +import Switch from '@mui/material/Switch'; +import FormControlLabel from '@mui/material/FormControlLabel'; + +import { IMobileContext } from "../infoview/context" + +interface PreferencesPopupProps extends IMobileContext{ + handleClose: () => void +} + +export function PreferencesPopup({ mobile, setMobile, lockMobile, setLockMobile, handleClose }: PreferencesPopupProps) { + return
+
+
+
+ +
+
+

Mobile layout

+
+
+ setMobile(!mobile)} + name="checked" + color="primary" + /> + } + label="Enable" + labelPlacement="start" + /> +
+
+ setLockMobile(!lockMobile)} + name="checked" + color="primary" + /> + } + label="Auto" + labelPlacement="start" + /> +
+
+
+
+
+} diff --git a/client/src/state/preferences.ts b/client/src/state/preferences.ts new file mode 100644 index 0000000..6ee0fa1 --- /dev/null +++ b/client/src/state/preferences.ts @@ -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;