diff options
author | Vendicated <vendicated@riseup.net> | 2022-08-31 04:07:16 +0200 |
---|---|---|
committer | Vendicated <vendicated@riseup.net> | 2022-08-31 04:07:16 +0200 |
commit | 98cb301df53305f397ac6e1b4e603c930820f228 (patch) | |
tree | 8c3bc642d0871a38f99aa2c2e8586bd7310cb361 /src/components/Settings.tsx | |
parent | cb288e204dd531b31f957f82150398d22930fdeb (diff) | |
download | Vencord-98cb301df53305f397ac6e1b4e603c930820f228.tar.gz Vencord-98cb301df53305f397ac6e1b4e603c930820f228.tar.bz2 Vencord-98cb301df53305f397ac6e1b4e603c930820f228.zip |
Make Settings & Settings Page
Diffstat (limited to 'src/components/Settings.tsx')
-rw-r--r-- | src/components/Settings.tsx | 84 |
1 files changed, 82 insertions, 2 deletions
diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index f996448..4499c9f 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -1,4 +1,84 @@ +import { lazy, LazyComponent, useAwaiter } from "../utils/misc"; +import { findByDisplayName, Forms } from '../webpack'; +import Plugins from 'plugins'; +import { useSettings } from "../api/settings"; +import { findByProps } from '../webpack/index'; +import IpcEvents from "../utils/IpcEvents"; + +// Lazy spam because this is ran before React is a thing. Todo: Fix that and clean this up lmao + +const SwitchItem = LazyComponent<React.PropsWithChildren<{ + value: boolean; + onChange: (v: boolean) => void; + note?: string; + tooltipNote?: string; + disabled?: boolean; +}>>(() => findByDisplayName("SwitchItem").default); + +const getButton = lazy(() => findByProps("ButtonLooks", "default")); +const Button = LazyComponent(() => getButton().default); +const getFlex = lazy(() => findByDisplayName("Flex")); +const Flex = LazyComponent(() => getFlex().default); +const FlexChild = LazyComponent(() => getFlex().default.Child); +const getMargins = lazy(() => findByProps("marginTop8", "marginBottom8")); + export default function Settings(props) { - console.log(props); - return (<p>Hi</p>); + const settingsDir = useAwaiter(() => VencordNative.ipc.invoke(IpcEvents.GET_SETTINGS_DIR), "Loading..."); + const settings = useSettings(); + + return ( + <Forms.FormSection tag="h1" title="Vencord"> + <Forms.FormText>SettingsDir: {settingsDir}</Forms.FormText> + <Flex className={getMargins().marginTop8 + " " + getMargins().marginBottom8}> + <FlexChild> + <Button + onClick={() => VencordNative.ipc.invoke(IpcEvents.OPEN_PATH, settingsDir)} + size={getButton().ButtonSizes.SMALL} + disabled={settingsDir === "Loading..."} + > + Launch Directory + </Button> + </FlexChild> + <FlexChild> + <Button + onClick={() => VencordNative.ipc.invoke(IpcEvents.OPEN_PATH, settingsDir + "/quickCss.css")} + size={getButton().ButtonSizes.SMALL} + disabled={settingsDir === "Loading..."} + > + Open QuickCSS File + </Button> + </FlexChild> + </Flex> + <Forms.FormTitle tag="h5">Settings</Forms.FormTitle> + <SwitchItem + value={settings.unsafeRequire} + onChange={v => settings.unsafeRequire = v} + note="Enables VencordNative.require. Useful for testing, very bad for security. Leave this off unless you need it." + > + Enable Ensafe Require + </SwitchItem> + <Forms.FormDivider /> + <Forms.FormTitle tag="h5">Plugins</Forms.FormTitle> + {Plugins.map(p => ( + <SwitchItem + disabled={p.required === true} + key={p.name} + value={settings.plugins[p.name].enabled} + onChange={v => { + settings.plugins[p.name].enabled = v; + if (v) { + p.dependencies?.forEach(d => { + settings.plugins[d].enabled = true; + }); + } + }} + note={p.description} + tooltipNote={p.required ? "This plugin is required. Thus you cannot disable it." : undefined} + > + {p.name} + </SwitchItem> + )) + } + </Forms.FormSection > + ); }
\ No newline at end of file |