import { ReactNative as RN, stylesheet } from "@metro/common"; import { Forms, General } from "@ui/components"; import { Plugin } from "@types"; import { getAssetIDByName } from "@ui/assets"; import { removePlugin, startPlugin, stopPlugin, showSettings, getSettings } from "@lib/plugins"; import { showToast } from "@ui/toasts"; const { FormRow, FormSwitch } = Forms; const { TouchableOpacity, Image } = General; const styles = stylesheet.createThemedStyleSheet({ card: { backgroundColor: stylesheet.ThemeColorMap.BACKGROUND_SECONDARY, borderRadius: 5, margin: 10, }, header: { backgroundColor: stylesheet.ThemeColorMap.BACKGROUND_TERTIARY, borderTopLeftRadius: 5, borderTopRightRadius: 5, }, actions: { justifyContent: "flex-end", flexDirection: "row", alignItems: "center", }, icon: { width: 22, height: 22, marginLeft: 5, tintColor: stylesheet.ThemeColorMap.INTERACTIVE_NORMAL, } }) interface PluginCardProps { plugin: Plugin; } export default function PluginCard({ plugin }: PluginCardProps) { const [enabled, setEnabled] = React.useState(plugin.enabled); const [update, setUpdate] = React.useState(plugin.update); const [removed, setRemoved] = React.useState(false); // This is bad, but I don't think I have much choice - Beef // Once the user re-renders the page, this is not taken into account anyway. if (removed) return <>; return ( i.name).join(", ")}`} leading={} trailing={ { if (v) startPlugin(plugin.id); else stopPlugin(plugin.id); setEnabled(v); }} /> } /> { removePlugin(plugin.id); setRemoved(true); }} > { plugin.update = !plugin.update; setUpdate(plugin.update); showToast(`${plugin.update ? "Enabled" : "Disabled"} updates for ${plugin.manifest.name}.`, getAssetIDByName("toast_image_saved")); }} > {getSettings(plugin.id) && showSettings(plugin)}> } } /> ) }