import { getAssetIdByName } from '@revenge-mod/assets' import { FormSwitch } from '@revenge-mod/components' import { ActionSheetActionCreators, ToastActionCreators, } from '@revenge-mod/discord/actions' import { Design } from '@revenge-mod/discord/design' import { Clipboard } from '@revenge-mod/externals/react-native-clipboard' import { getInternalPluginMeta, isPluginEssential, } from '@revenge-mod/plugins/_' import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord' import { getErrorStack } from '@revenge-mod/utils/error' import { handleDisablePlugin, handleEnablePlugin } from '../utils/actions' import { openPluginSettings, showPluginClearDataConfirmation, } from '../utils/alerts' import { PluginInfo } from './PluginCard' import { usePluginEnabled } from './PluginStateProvider' import type { AnyPlugin } from '@revenge-mod/plugins/_' export interface PluginOptionsActionSheetProps { plugin: AnyPlugin sheetKey: string } const { ActionSheet, IconButton, TableRowGroup, TableRow, Stack } = Design const FileWarningIcon = getAssetIdByName('FileWarningIcon', 'png')! const SettingsIcon = getAssetIdByName('SettingsIcon', 'png')! export default function PluginOptionsActionSheet({ plugin, sheetKey, }: PluginOptionsActionSheetProps) { const enabled = usePluginEnabled(plugin) const meta = getInternalPluginMeta(plugin) const { dependencies, dependents } = meta! const essential = isPluginEssential(meta) const { manifest: { id, name, author, description, icon }, errors, flags, } = plugin const closeActionSheet = () => { ActionSheetActionCreators.hideActionSheet(sheetKey) } return ( { if (v) handleEnablePlugin(plugin) else handleDisablePlugin(plugin) }} /> ) } /> { showPluginClearDataConfirmation( plugin, closeActionSheet, ) }} /> {plugin.SettingsComponent && ( { openPluginSettings(plugin) closeActionSheet() }} /> )} {errors.length && ( { Clipboard.setString( errors.map(getErrorStack).join('\n'), ) showCopiedToClipboardToast() }} /> )} { Clipboard.setString(id) showCopiedToClipboardToast() }} /> {dependencies?.length && ( )} {dependents?.length && ( )} ) } const CopyIcon = lookupGeneratedIconComponent('CopyIcon')! function showCopiedToClipboardToast() { ToastActionCreators.open({ key: 'REVENGE_PLUGIN_SETTINGS_COPIED', content: 'Copied to clipboard', IconComponent: CopyIcon, }) }