mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-06 03:05:26 +03:00
fix rare config load bug
- view mode will default to admin if config does fail to load for w/e reason - rename viewMode to currentViewMode
This commit is contained in:
parent
69f083dcf1
commit
6cf4b5e7e2
@ -17,7 +17,7 @@ export default function AppBar() {
|
|||||||
const [showMoreMenu, setShowMoreMenu] = useState(false);
|
const [showMoreMenu, setShowMoreMenu] = useState(false);
|
||||||
const [showDialog, setShowDialog] = useState(false);
|
const [showDialog, setShowDialog] = useState(false);
|
||||||
const [showDialogWait, setShowDialogWait] = useState(false);
|
const [showDialogWait, setShowDialogWait] = useState(false);
|
||||||
const { viewMode, setViewMode } = useViewMode();
|
const { currentViewMode, setViewMode } = useViewMode();
|
||||||
const { setDarkMode } = useDarkMode();
|
const { setDarkMode } = useDarkMode();
|
||||||
const { send: sendRestart } = useRestart();
|
const { send: sendRestart } = useRestart();
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ export default function AppBar() {
|
|||||||
<MenuItem icon={SettingsIcon} label="Viewmode:">
|
<MenuItem icon={SettingsIcon} label="Viewmode:">
|
||||||
<select
|
<select
|
||||||
className="py-0.5 pr-8"
|
className="py-0.5 pr-8"
|
||||||
value={viewMode}
|
value={currentViewMode}
|
||||||
onChange={(e) => handleSetViewMode(e.target.value)}
|
onChange={(e) => handleSetViewMode(e.target.value)}
|
||||||
>
|
>
|
||||||
{ Object.keys(ViewModeTypes).filter((v) => !isNaN(Number(v))).map(key => <option key={key} value={key}>{ViewModeTypes[key]}</option>) }
|
{ Object.keys(ViewModeTypes).filter((v) => !isNaN(Number(v))).map(key => <option key={key} value={key}>{ViewModeTypes[key]}</option>) }
|
||||||
|
|||||||
@ -16,7 +16,7 @@ export default function App() {
|
|||||||
return (
|
return (
|
||||||
<DarkModeProvider>
|
<DarkModeProvider>
|
||||||
<DrawerProvider>
|
<DrawerProvider>
|
||||||
<ViewModeProvider>
|
<ViewModeProvider config={config}>
|
||||||
<div data-testid="app" className="w-full">
|
<div data-testid="app" className="w-full">
|
||||||
<AppBar />
|
<AppBar />
|
||||||
{!config ? (
|
{!config ? (
|
||||||
|
|||||||
@ -3,9 +3,9 @@ import { useViewMode } from '../context';
|
|||||||
import { ViewModeTypes } from './ViewOptionEnum';
|
import { ViewModeTypes } from './ViewOptionEnum';
|
||||||
|
|
||||||
export default function ViewOption({children, requiredmode }) {
|
export default function ViewOption({children, requiredmode }) {
|
||||||
const { viewMode } = useViewMode();
|
const { currentViewMode } = useViewMode();
|
||||||
|
|
||||||
return viewMode >= ViewModeTypes[requiredmode] ? (
|
return currentViewMode >= ViewModeTypes[requiredmode] ? (
|
||||||
<>{children}</>
|
<>{children}</>
|
||||||
|
|
||||||
) : null;
|
) : null;
|
||||||
|
|||||||
@ -2,24 +2,34 @@ import { h, createContext } from 'preact';
|
|||||||
import { get as getData, set as setData } from 'idb-keyval';
|
import { get as getData, set as setData } from 'idb-keyval';
|
||||||
import { useCallback, useContext, useEffect, useLayoutEffect, useState } from 'preact/hooks';
|
import { useCallback, useContext, useEffect, useLayoutEffect, useState } from 'preact/hooks';
|
||||||
import { ViewModeTypes } from '../components/ViewOptionEnum';
|
import { ViewModeTypes } from '../components/ViewOptionEnum';
|
||||||
import useSWR from 'swr';
|
|
||||||
|
|
||||||
const ViewMode = createContext(null);
|
const ViewMode = createContext("");
|
||||||
|
|
||||||
export function ViewModeProvider({ children }) {
|
export function ViewModeProvider({ children, config }) {
|
||||||
const [viewMode, setViewMode] = usePersistence('view-mode', null);
|
const [currentViewMode, setCurrentViewMode] = useState(null);
|
||||||
const { data: config } = useSWR('config');
|
|
||||||
|
const setViewMode = useCallback(
|
||||||
|
(value) => {
|
||||||
|
setData('view-mode', value);
|
||||||
|
setCurrentViewMode(value);
|
||||||
|
},
|
||||||
|
[setCurrentViewMode]
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function load() {
|
async function load() {
|
||||||
const configValue = ViewModeTypes[config.ui.viewmode]; //fixes a load error
|
const configValue = config ? ViewModeTypes[config.ui.viewmode].toString() : "2";
|
||||||
setViewMode(viewMode || configValue);
|
const viewmode = await getData('view-mode');
|
||||||
|
setViewMode(viewmode || configValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
load();
|
load();
|
||||||
}, [setViewMode, config]);
|
}, [config, setViewMode]);
|
||||||
|
|
||||||
return <ViewMode.Provider value={{ viewMode, setViewMode }}>{children}</ViewMode.Provider>;
|
|
||||||
|
return !currentViewMode ? null : (
|
||||||
|
<ViewMode.Provider value={{ currentViewMode, setViewMode }}>{children}</ViewMode.Provider>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useViewMode() {
|
export function useViewMode() {
|
||||||
|
|||||||
@ -88,9 +88,9 @@ function Camera({ name, config }) {
|
|||||||
[config, detectValue, sendDetect, recordValue, sendRecordings, snapshotValue, sendSnapshots]
|
[config, detectValue, sendDetect, recordValue, sendRecordings, snapshotValue, sendSnapshots]
|
||||||
);
|
);
|
||||||
|
|
||||||
const { viewMode } = useViewMode();
|
const { currentViewMode } = useViewMode();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card buttons={buttons} href={href} header={cleanName} icons={viewMode >= ViewModeTypes["admin"] ? icons : []} media={<CameraImage camera={name} stretch />} />
|
<Card buttons={buttons} href={href} header={cleanName} icons={currentViewMode >= ViewModeTypes["admin"] ? icons : []} media={<CameraImage camera={name} stretch />} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user