summaryrefslogtreecommitdiff
path: root/frontend/src/components/store
diff options
context:
space:
mode:
authorjbofill <74568881+jessebofill@users.noreply.github.com>2025-12-30 12:29:08 -0700
committerGitHub <noreply@github.com>2025-12-30 13:29:08 -0600
commit9f586a1b97cf9069fbfbeee17e3909baf9e95f66 (patch)
treec3477abcd8edec5fdf61251748a4f3bbef165e83 /frontend/src/components/store
parent789851579b8eaff70c2fb9da999e86d86a2d95bd (diff)
downloaddecky-loader-9f586a1b97cf9069fbfbeee17e3909baf9e95f66.tar.gz
decky-loader-9f586a1b97cf9069fbfbeee17e3909baf9e95f66.zip
Feat: Disable plugins (#850)HEADmain
* implement base frontend changes necessary for plugin disabling * implement frontend diisable functions/ modal * plugin disable boilerplate / untested * Feat disable plugins (#810) * implement base frontend changes necessary for plugin disabling * implement frontend diisable functions/ modal --------- Co-authored-by: Jesse Bofill <jesse_bofill@yahoo.com> * fix mistakes * add frontend * working plugin disable, not tested extensively * fix uninstalled hidden plugins remaining in list * hide plugin irrelevant plugin setting menu option when disabled * fix hidden plugin issues * reset disabled plugin on uninstall * fix plugin load on reenable * move disable settings uninstall cleanup * add engilsh tranlsations for enable/ disable elements * fix bug where wrong loadType can get passed to importPlugin * show correct number of hidden plugins if plugin is both hidden and disabled * fix: get fresh list of plugin updates when changed in settings plugin list * fix: fix invalid semver plugin version from preventing latest updates * retain x position when changing focus in list items that have multiple horizontal focusables * correction to pluging version checking validation * make sure disabled plugins get checked for updates * show number of disabled plugins at bottom of plugin view * add notice to update modals that disabled plugins will be enabled upon installation * run formatter * Update backend/decky_loader/locales/en-US.json Co-authored-by: EMERALD <hudson.samuels@gmail.com> * chore: correct filename typo * chore: change disabled icon * chore: revert accidental defsettings changes * format * add timeout to frontend importPlugin if a request hangs this prevent it from blocking other plugin loads. backend diaptch_plugin which calls this for individual plugin load (as opposed to batch) is set to 15s. other callers of importPlugin are not using timeout, same as before. * fix plugin update checking loop --------- Co-authored-by: marios <marios8543@gmail.com> Co-authored-by: EMERALD <hudson.samuels@gmail.com>
Diffstat (limited to 'frontend/src/components/store')
-rw-r--r--frontend/src/components/store/PluginCard.tsx19
-rw-r--r--frontend/src/components/store/Store.tsx2
2 files changed, 16 insertions, 5 deletions
diff --git a/frontend/src/components/store/PluginCard.tsx b/frontend/src/components/store/PluginCard.tsx
index f64abd09..a47207c9 100644
--- a/frontend/src/components/store/PluginCard.tsx
+++ b/frontend/src/components/store/PluginCard.tsx
@@ -1,15 +1,23 @@
-import { ButtonItem, Dropdown, Focusable, PanelSectionRow, SingleDropdownOption, SuspensefulImage } from '@decky/ui';
+import {
+ ButtonItem,
+ Dropdown,
+ Focusable,
+ NavEntryPositionPreferences,
+ PanelSectionRow,
+ SingleDropdownOption,
+ SuspensefulImage,
+} from '@decky/ui';
import { CSSProperties, FC, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { FaArrowDown, FaArrowUp, FaCheck, FaDownload, FaRecycle } from 'react-icons/fa';
-import { InstallType, Plugin } from '../../plugin';
+import { DisabledPlugin, InstallType, Plugin } from '../../plugin';
import { StorePlugin, requestPluginInstall } from '../../store';
import ExternalLink from '../ExternalLink';
interface PluginCardProps {
storePlugin: StorePlugin;
- installedPlugin: Plugin | undefined;
+ installedPlugin: Plugin | DisabledPlugin | undefined;
}
const PluginCard: FC<PluginCardProps> = ({ storePlugin, installedPlugin }) => {
@@ -139,7 +147,10 @@ const PluginCard: FC<PluginCardProps> = ({ storePlugin, installedPlugin }) => {
</div>
<div className="deckyStoreCardButtonRow">
<PanelSectionRow>
- <Focusable style={{ display: 'flex', gap: '5px', padding: 0 }}>
+ <Focusable
+ style={{ display: 'flex', gap: '5px', padding: 0 }}
+ navEntryPreferPosition={NavEntryPositionPreferences.MAINTAIN_X}
+ >
<div
className="deckyStoreCardInstallContainer"
style={
diff --git a/frontend/src/components/store/Store.tsx b/frontend/src/components/store/Store.tsx
index 3209ba08..72187cbc 100644
--- a/frontend/src/components/store/Store.tsx
+++ b/frontend/src/components/store/Store.tsx
@@ -105,7 +105,7 @@ const BrowseTab: FC<{ setPluginCount: Dispatch<SetStateAction<number | null>> }>
})();
}, []);
- const { plugins: installedPlugins } = useDeckyState();
+ const { installedPlugins } = useDeckyState();
return (
<>