Browse Source

Add notification toggling functionality

pull/185/head
Marc Hyeler 2 years ago
parent
commit
f700a99d67
  1. 11
      src/components/DeviceSelector.tsx
  2. 10
      src/core/stores/appStore.ts

11
src/components/DeviceSelector.tsx

@ -11,6 +11,8 @@ import {
PlusIcon, PlusIcon,
SunIcon, SunIcon,
TerminalIcon, TerminalIcon,
BellIcon,
BellOffIcon,
} from "lucide-react"; } from "lucide-react";
export const DeviceSelector = (): JSX.Element => { export const DeviceSelector = (): JSX.Element => {
@ -20,6 +22,8 @@ export const DeviceSelector = (): JSX.Element => {
setSelectedDevice, setSelectedDevice,
darkMode, darkMode,
setDarkMode, setDarkMode,
notifications,
setNotifications,
setCommandPaletteOpen, setCommandPaletteOpen,
setConnectDialogOpen, setConnectDialogOpen,
} = useAppStore(); } = useAppStore();
@ -61,6 +65,13 @@ export const DeviceSelector = (): JSX.Element => {
</ul> </ul>
</div> </div>
<div className="flex w-20 flex-col items-center space-y-5 bg-transparent px-5 pb-5"> <div className="flex w-20 flex-col items-center space-y-5 bg-transparent px-5 pb-5">
<button
type="button"
className="transition-all hover:text-accent"
onClick={() => setNotifications(!notifications)}
>
{notifications ? <BellIcon /> : <BellOffIcon />}
</button>
<button <button
type="button" type="button"
className="transition-all hover:text-accent" className="transition-all hover:text-accent"

10
src/core/stores/appStore.ts

@ -26,6 +26,7 @@ interface AppState {
rasterSources: RasterSource[]; rasterSources: RasterSource[];
commandPaletteOpen: boolean; commandPaletteOpen: boolean;
darkMode: boolean; darkMode: boolean;
notifications: boolean;
accent: AccentColor; accent: AccentColor;
connectDialogOpen: boolean; connectDialogOpen: boolean;
@ -38,6 +39,7 @@ interface AppState {
removeDevice: (deviceId: number) => void; removeDevice: (deviceId: number) => void;
setCommandPaletteOpen: (open: boolean) => void; setCommandPaletteOpen: (open: boolean) => void;
setDarkMode: (enabled: boolean) => void; setDarkMode: (enabled: boolean) => void;
setNotifications: (enabled: boolean) => void;
setAccent: (color: AccentColor) => void; setAccent: (color: AccentColor) => void;
setConnectDialogOpen: (open: boolean) => void; setConnectDialogOpen: (open: boolean) => void;
} }
@ -49,6 +51,7 @@ export const useAppStore = create<AppState>()((set) => ({
rasterSources: [], rasterSources: [],
commandPaletteOpen: false, commandPaletteOpen: false,
darkMode: window.matchMedia("(prefers-color-scheme: dark)").matches, darkMode: window.matchMedia("(prefers-color-scheme: dark)").matches,
notifications: true,
accent: "orange", accent: "orange",
connectDialogOpen: false, connectDialogOpen: false,
@ -99,6 +102,13 @@ export const useAppStore = create<AppState>()((set) => ({
}), }),
); );
}, },
setNotifications: (enabled: boolean) => {
set(
produce<AppState>((draft) => {
draft.notifications = enabled;
}),
);
},
setAccent(color) { setAccent(color) {
set( set(
produce<AppState>((draft) => { produce<AppState>((draft) => {

Loading…
Cancel
Save