mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
6c0978498d
* Add option for mqtt config * Setup communication layer * Have a dispatcher which is responsible for handling and sending messages * Move mqtt to communication * Separate ws communications module * Make ws client conform to communicator * Cleanup imports * Migrate to new dispatcher * Clean up * Need to set topic prefix * Remove references to mqtt in dispatcher * Don't start mqtt until dispatcher is subscribed * Cleanup * Shorten package * Formatting * Remove unused * Cleanup * Rename mqtt to ws on web * Fix ws mypy * Fix mypy * Reformat * Cleanup if/else chain * Catch bad set commands
87 lines
3.0 KiB
JavaScript
87 lines
3.0 KiB
JavaScript
import { h, Fragment } from 'preact';
|
|
import BaseAppBar from './components/AppBar';
|
|
import LinkedLogo from './components/LinkedLogo';
|
|
import Menu, { MenuItem, MenuSeparator } from './components/Menu';
|
|
import AutoAwesomeIcon from './icons/AutoAwesome';
|
|
import LightModeIcon from './icons/LightMode';
|
|
import DarkModeIcon from './icons/DarkMode';
|
|
import FrigateRestartIcon from './icons/FrigateRestart';
|
|
import Prompt from './components/Prompt';
|
|
import { useDarkMode } from './context';
|
|
import { useCallback, useRef, useState } from 'preact/hooks';
|
|
import { useRestart } from './api/ws';
|
|
|
|
export default function AppBar() {
|
|
const [showMoreMenu, setShowMoreMenu] = useState(false);
|
|
const [showDialog, setShowDialog] = useState(false);
|
|
const [showDialogWait, setShowDialogWait] = useState(false);
|
|
const { setDarkMode } = useDarkMode();
|
|
const { send: sendRestart } = useRestart();
|
|
|
|
const handleSelectDarkMode = useCallback(
|
|
(value) => {
|
|
setDarkMode(value);
|
|
setShowMoreMenu(false);
|
|
},
|
|
[setDarkMode, setShowMoreMenu]
|
|
);
|
|
|
|
const moreRef = useRef(null);
|
|
|
|
const handleShowMenu = useCallback(() => {
|
|
setShowMoreMenu(true);
|
|
}, [setShowMoreMenu]);
|
|
|
|
const handleDismissMoreMenu = useCallback(() => {
|
|
setShowMoreMenu(false);
|
|
}, [setShowMoreMenu]);
|
|
|
|
const handleClickRestartDialog = useCallback(() => {
|
|
setShowDialog(false);
|
|
setShowDialogWait(true);
|
|
sendRestart();
|
|
}, [setShowDialog]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
|
|
const handleDismissRestartDialog = useCallback(() => {
|
|
setShowDialog(false);
|
|
}, [setShowDialog]);
|
|
|
|
const handleRestart = useCallback(() => {
|
|
setShowMoreMenu(false);
|
|
setShowDialog(true);
|
|
}, [setShowDialog]);
|
|
|
|
return (
|
|
<Fragment>
|
|
<BaseAppBar title={LinkedLogo} overflowRef={moreRef} onOverflowClick={handleShowMenu} />
|
|
{showMoreMenu ? (
|
|
<Menu onDismiss={handleDismissMoreMenu} relativeTo={moreRef}>
|
|
<MenuItem icon={AutoAwesomeIcon} label="Auto dark mode" value="media" onSelect={handleSelectDarkMode} />
|
|
<MenuSeparator />
|
|
<MenuItem icon={LightModeIcon} label="Light" value="light" onSelect={handleSelectDarkMode} />
|
|
<MenuItem icon={DarkModeIcon} label="Dark" value="dark" onSelect={handleSelectDarkMode} />
|
|
<MenuSeparator />
|
|
<MenuItem icon={FrigateRestartIcon} label="Restart Frigate" onSelect={handleRestart} />
|
|
</Menu>
|
|
) : null}
|
|
{showDialog ? (
|
|
<Prompt
|
|
onDismiss={handleDismissRestartDialog}
|
|
title="Restart Frigate"
|
|
text="Are you sure?"
|
|
actions={[
|
|
{ text: 'Yes', color: 'red', onClick: handleClickRestartDialog },
|
|
{ text: 'Cancel', onClick: handleDismissRestartDialog },
|
|
]}
|
|
/>
|
|
) : null}
|
|
{showDialogWait ? (
|
|
<Prompt
|
|
title="Restart in progress"
|
|
text="Please wait a few seconds for the restart to complete before reloading the page."
|
|
/>
|
|
) : null}
|
|
</Fragment>
|
|
);
|
|
}
|