diff options
| author | Jonas Dellinger <jonas@dellinger.dev> | 2023-06-24 12:59:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-24 12:59:39 +0200 |
| commit | ef9afa8cbca29a3dd83454f44264a4682e968c59 (patch) | |
| tree | 5eb5033ba579ab6159d593cb01d8cf9b011f1942 /frontend/src/components | |
| parent | 143461d59793665f9e54d05ba00b16c55dfec57f (diff) | |
| download | decky-loader-ef9afa8cbca29a3dd83454f44264a4682e968c59.tar.gz decky-loader-ef9afa8cbca29a3dd83454f44264a4682e968c59.zip | |
Add notification settings, which allows muting decky/plugin toast notifications (#479)
* Add notification settings, which allows muting decky/plugin toast notifications
* Fix typos
Diffstat (limited to 'frontend/src/components')
3 files changed, 49 insertions, 0 deletions
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 ( + <> + <Field label={t('SettingsGeneralIndex.notifications.decky_updates_label')}> + <Toggle + value={notificationSettings.deckyUpdates} + onChange={(deckyUpdates) => { + notificationService.update({ ...notificationSettings, deckyUpdates }); + }} + /> + </Field> + <Field label={t('SettingsGeneralIndex.notifications.plugin_updates_label')}> + <Toggle + value={notificationSettings.pluginUpdates} + onChange={(pluginUpdates) => { + notificationService.update({ ...notificationSettings, pluginUpdates }); + }} + /> + </Field> + </> + ); +}; + +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'; @@ -28,6 +29,10 @@ export default function GeneralSettings({ <StoreSelect /> </DialogControlsSection> <DialogControlsSection> + <DialogControlsSectionHeader>{t('SettingsGeneralIndex.notifications.header')}</DialogControlsSectionHeader> + <NotificationSettings /> + </DialogControlsSection> + <DialogControlsSection> <DialogControlsSectionHeader>{t('SettingsGeneralIndex.other.header')}</DialogControlsSectionHeader> <Field label={t('SettingsGeneralIndex.developer_mode.label')}> <Toggle |
