From ef9afa8cbca29a3dd83454f44264a4682e968c59 Mon Sep 17 00:00:00 2001 From: Jonas Dellinger Date: Sat, 24 Jun 2023 12:59:39 +0200 Subject: Add notification settings, which allows muting decky/plugin toast notifications (#479) * Add notification settings, which allows muting decky/plugin toast notifications * Fix typos --- frontend/src/components/DeckyState.tsx | 9 ++++++ .../pages/general/NotificationSettings.tsx | 35 ++++++++++++++++++++++ .../components/settings/pages/general/index.tsx | 5 ++++ 3 files changed, 49 insertions(+) create mode 100644 frontend/src/components/settings/pages/general/NotificationSettings.tsx (limited to 'frontend/src/components') diff --git a/frontend/src/components/DeckyState.tsx b/frontend/src/components/DeckyState.tsx index 920985b3..d20c8d86 100644 --- a/frontend/src/components/DeckyState.tsx +++ b/frontend/src/components/DeckyState.tsx @@ -1,5 +1,6 @@ import { FC, createContext, useContext, useEffect, useState } from 'react'; +import { DEFAULT_NOTIFICATION_SETTINGS, NotificationSettings } from '../notification-service'; import { Plugin } from '../plugin'; import { PluginUpdateMapping } from '../store'; import { VerInfo } from '../updater'; @@ -13,6 +14,7 @@ interface PublicDeckyState { hasLoaderUpdate?: boolean; isLoaderUpdating: boolean; versionInfo: VerInfo | null; + notificationSettings: NotificationSettings; userInfo: UserInfo | null; } @@ -30,6 +32,7 @@ export class DeckyState { private _hasLoaderUpdate: boolean = false; private _isLoaderUpdating: boolean = false; private _versionInfo: VerInfo | null = null; + private _notificationSettings = DEFAULT_NOTIFICATION_SETTINGS; private _userInfo: UserInfo | null = null; public eventBus = new EventTarget(); @@ -44,6 +47,7 @@ export class DeckyState { hasLoaderUpdate: this._hasLoaderUpdate, isLoaderUpdating: this._isLoaderUpdating, versionInfo: this._versionInfo, + notificationSettings: this._notificationSettings, userInfo: this._userInfo, }; } @@ -93,6 +97,11 @@ export class DeckyState { this.notifyUpdate(); } + setNotificationSettings(notificationSettings: NotificationSettings) { + this._notificationSettings = notificationSettings; + this.notifyUpdate(); + } + setUserInfo(userInfo: UserInfo) { this._userInfo = userInfo; this.notifyUpdate(); diff --git a/frontend/src/components/settings/pages/general/NotificationSettings.tsx b/frontend/src/components/settings/pages/general/NotificationSettings.tsx new file mode 100644 index 00000000..21c2fd82 --- /dev/null +++ b/frontend/src/components/settings/pages/general/NotificationSettings.tsx @@ -0,0 +1,35 @@ +import { Field, Toggle } from 'decky-frontend-lib'; +import { FC } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { useDeckyState } from '../../../DeckyState'; + +const NotificationSettings: FC = () => { + const { notificationSettings } = useDeckyState(); + const notificationService = window.DeckyPluginLoader.notificationService; + + const { t } = useTranslation(); + + return ( + <> + + { + notificationService.update({ ...notificationSettings, deckyUpdates }); + }} + /> + + + { + notificationService.update({ ...notificationSettings, pluginUpdates }); + }} + /> + + + ); +}; + +export default NotificationSettings; diff --git a/frontend/src/components/settings/pages/general/index.tsx b/frontend/src/components/settings/pages/general/index.tsx index 96ae6782..6fc62a46 100644 --- a/frontend/src/components/settings/pages/general/index.tsx +++ b/frontend/src/components/settings/pages/general/index.tsx @@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next'; import { useDeckyState } from '../../../DeckyState'; import BranchSelect from './BranchSelect'; +import NotificationSettings from './NotificationSettings'; import StoreSelect from './StoreSelect'; import UpdaterSettings from './Updater'; @@ -27,6 +28,10 @@ export default function GeneralSettings({ + + {t('SettingsGeneralIndex.notifications.header')} + + {t('SettingsGeneralIndex.other.header')} -- cgit v1.2.3