mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-07-10 22:41:59 +00:00
9f586a1b97
* 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>
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { ConfirmModal, Spinner } from '@decky/ui';
|
|
import { FC, useState } from 'react';
|
|
|
|
import { uninstallPlugin } from '../../plugin';
|
|
import { DeckyState } from '../DeckyState';
|
|
|
|
interface PluginUninstallModalProps {
|
|
deckyState: DeckyState;
|
|
name: string;
|
|
title: string;
|
|
buttonText: string;
|
|
description: string;
|
|
closeModal?(): void;
|
|
}
|
|
|
|
const PluginUninstallModal: FC<PluginUninstallModalProps> = ({
|
|
name,
|
|
title,
|
|
buttonText,
|
|
description,
|
|
deckyState,
|
|
closeModal,
|
|
}) => {
|
|
const [uninstalling, setUninstalling] = useState<boolean>(false);
|
|
return (
|
|
<ConfirmModal
|
|
closeModal={closeModal}
|
|
onOK={async () => {
|
|
setUninstalling(true);
|
|
await uninstallPlugin(name);
|
|
deckyState.setDisabledPlugins(deckyState.publicState().disabledPlugins.filter((d) => d.name !== name));
|
|
// uninstalling a plugin resets the hidden setting for it server-side
|
|
// we invalidate here so if you re-install it, you won't have an out-of-date hidden filter
|
|
await DeckyPluginLoader.frozenPluginsService.invalidate();
|
|
await DeckyPluginLoader.hiddenPluginsService.invalidate();
|
|
closeModal?.();
|
|
}}
|
|
bOKDisabled={uninstalling}
|
|
bCancelDisabled={uninstalling}
|
|
strTitle={
|
|
<div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', width: '100%' }}>
|
|
{title}
|
|
{uninstalling && <Spinner width="24px" height="24px" style={{ marginLeft: 'auto' }} />}
|
|
</div>
|
|
}
|
|
strOKButtonText={buttonText}
|
|
>
|
|
{description}
|
|
</ConfirmModal>
|
|
);
|
|
};
|
|
|
|
export default PluginUninstallModal;
|