From 04c7275b4c2d85d9af16cd09bc6aaff1f33e40ca Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Sun, 4 May 2025 16:45:38 +0700 Subject: [PATCH] feat(plugins/settings): refactor to match discord's codebase style --- src/plugins/settings/SettingsConstants.ts | 32 ++++++++++ .../settings/components/icons/AssetIcon.tsx | 11 ++++ .../CallGarbageCollectorSetting.tsx | 16 +++++ .../settings/definitions/HermesVersion.tsx | 21 ------ .../definitions/HermesVersionSetting.tsx | 19 ++++++ .../definitions/ReactNativeVersion.tsx | 21 ------ .../definitions/ReactNativeVersionSetting.tsx | 19 ++++++ ...actVersion.tsx => ReactVersionSetting.tsx} | 15 ++--- src/plugins/settings/definitions/Revenge.ts | 24 ------- .../definitions/RevengeDeveloperSetting.tsx | 17 +++++ .../definitions/RevengeFontsSetting.tsx | 18 ++++++ .../RevengeNotImplementedSetting.tsx | 18 ++++++ .../definitions/RevengePluginsSetting.tsx | 21 ++++++ .../settings/definitions/RevengeSetting.tsx | 18 ++++++ .../definitions/RevengeThemesSetting.tsx | 18 ++++++ .../settings/definitions/RevengeVersion.ts | 15 ----- .../definitions/RevengeVersionSetting.ts | 14 ++++ .../TriggerErrorBoundarySetting.tsx | 21 ++++++ src/plugins/settings/index.ts | 64 +++++++++++++------ .../screens/RevengeDeveloperSettingScreen.tsx | 19 ++++++ .../screens/RevengeFontsSettingScreen.tsx | 15 +++++ .../screens/RevengePluginsSettingScreen.tsx | 15 +++++ .../settings/screens/RevengeSettingScreen.tsx | 13 ++-- .../screens/RevengeThemesSettingScreen.tsx | 15 +++++ .../TriggerErrorBoundarySettingScreen.tsx | 4 ++ 25 files changed, 370 insertions(+), 113 deletions(-) create mode 100644 src/plugins/settings/SettingsConstants.ts create mode 100644 src/plugins/settings/components/icons/AssetIcon.tsx create mode 100644 src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx delete mode 100644 src/plugins/settings/definitions/HermesVersion.tsx create mode 100644 src/plugins/settings/definitions/HermesVersionSetting.tsx delete mode 100644 src/plugins/settings/definitions/ReactNativeVersion.tsx create mode 100644 src/plugins/settings/definitions/ReactNativeVersionSetting.tsx rename src/plugins/settings/definitions/{ReactVersion.tsx => ReactVersionSetting.tsx} (57%) delete mode 100644 src/plugins/settings/definitions/Revenge.ts create mode 100644 src/plugins/settings/definitions/RevengeDeveloperSetting.tsx create mode 100644 src/plugins/settings/definitions/RevengeFontsSetting.tsx create mode 100644 src/plugins/settings/definitions/RevengeNotImplementedSetting.tsx create mode 100644 src/plugins/settings/definitions/RevengePluginsSetting.tsx create mode 100644 src/plugins/settings/definitions/RevengeSetting.tsx create mode 100644 src/plugins/settings/definitions/RevengeThemesSetting.tsx delete mode 100644 src/plugins/settings/definitions/RevengeVersion.ts create mode 100644 src/plugins/settings/definitions/RevengeVersionSetting.ts create mode 100644 src/plugins/settings/definitions/TriggerErrorBoundarySetting.tsx create mode 100644 src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx create mode 100644 src/plugins/settings/screens/RevengeFontsSettingScreen.tsx create mode 100644 src/plugins/settings/screens/RevengePluginsSettingScreen.tsx create mode 100644 src/plugins/settings/screens/RevengeThemesSettingScreen.tsx create mode 100644 src/plugins/settings/screens/TriggerErrorBoundarySettingScreen.tsx diff --git a/src/plugins/settings/SettingsConstants.ts b/src/plugins/settings/SettingsConstants.ts new file mode 100644 index 0000000..a18e8c3 --- /dev/null +++ b/src/plugins/settings/SettingsConstants.ts @@ -0,0 +1,32 @@ +export const MobileSetting = { + // MAIN SETTINGS + + REVENGE: 'REVENGE', + REVENGE_PLUGINS: 'REVENGE_PLUGINS', + REVENGE_THEMES: 'REVENGE_THEMES', + REVENGE_FONTS: 'REVENGE_FONTS', + REVENGE_DEVELOPER: 'REVENGE_DEVELOPER', + + // SUBSETTINGS + + REVENGE_VERSION: 'REVENGE_VERSION', + REACT_VERSION: 'REACT_VERSION', + REACT_NATIVE_VERSION: 'REACT_NATIVE_VERSION', + HERMES_VERSION: 'HERMES_VERSION', + + CALL_GARBAGE_COLLECTOR: 'CALL_GARBAGE_COLLECTOR', + TRIGGER_ERROR_BOUNDARY: 'TRIGGER_ERROR_BOUNDARY', + + REVENGE_NOT_IMPLEMENTED: 'REVENGE_NOT_IMPLEMENTED', +} as const + +export const UserSettingsSections = { + [MobileSetting.REVENGE]: 'Revenge', + [MobileSetting.REVENGE_PLUGINS]: 'Revenge Plugins', + [MobileSetting.REVENGE_THEMES]: 'Revenge Themes', + [MobileSetting.REVENGE_FONTS]: 'Revenge Fonts', + [MobileSetting.REVENGE_DEVELOPER]: 'Revenge Developer', + [MobileSetting.TRIGGER_ERROR_BOUNDARY]: 'Trigger Error Boundary', +} as const + +export const AlwaysHidden = () => false diff --git a/src/plugins/settings/components/icons/AssetIcon.tsx b/src/plugins/settings/components/icons/AssetIcon.tsx new file mode 100644 index 0000000..03f7938 --- /dev/null +++ b/src/plugins/settings/components/icons/AssetIcon.tsx @@ -0,0 +1,11 @@ +import { getAssetByName } from '@revenge-mod/assets' +import type { DiscordModules } from '@revenge-mod/discord/types' +import { Components } from '@revenge-mod/discord/ui' + +export default function AssetIcon(props: AssetIconProps) { + return +} + +export interface AssetIconProps extends Omit { + name: string +} diff --git a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx new file mode 100644 index 0000000..ffa2e92 --- /dev/null +++ b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx @@ -0,0 +1,16 @@ +import { React } from '@revenge-mod/react' + +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const CallGarbageCollectorSetting: SettingsRowConfig = { + parent: null, + IconComponent: () => , + title: () => 'Call Garbage Collector', + useDescription: () => 'Call the garbage collector manually.', + onPress: gc, + type: 'pressable', +} + +export default CallGarbageCollectorSetting diff --git a/src/plugins/settings/definitions/HermesVersion.tsx b/src/plugins/settings/definitions/HermesVersion.tsx deleted file mode 100644 index 77bc71d..0000000 --- a/src/plugins/settings/definitions/HermesVersion.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { getAssetByName } from '@revenge-mod/assets' - -import { Components } from '@revenge-mod/discord/ui' -import { addSettingsRow } from '@revenge-mod/discord/ui/settings' - -import { React } from '@revenge-mod/react' - -import { REVENGE } from './Revenge' - -export const HERMES_VERSION = 'HERMES_VERSION' - -// @ts-expect-error -const props = HermesInternal.getRuntimeProperties() - -addSettingsRow(HERMES_VERSION, { - parent: REVENGE, - IconComponent: () => , - title: () => 'Hermes', - useDescription: () => `${props['Bytecode Version']} (${props.Build})`, - type: 'pressable', -}) diff --git a/src/plugins/settings/definitions/HermesVersionSetting.tsx b/src/plugins/settings/definitions/HermesVersionSetting.tsx new file mode 100644 index 0000000..0d23c64 --- /dev/null +++ b/src/plugins/settings/definitions/HermesVersionSetting.tsx @@ -0,0 +1,19 @@ +import { React } from '@revenge-mod/react' + +import AssetIcon from '../components/icons/AssetIcon' +import { MobileSetting } from '../SettingsConstants' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +// @ts-expect-error +const props = HermesInternal.getRuntimeProperties() + +const HermesVersionSetting: SettingsRowConfig = { + parent: MobileSetting.REVENGE, + IconComponent: () => , + title: () => 'Hermes', + useDescription: () => `${props['Bytecode Version']} (${props.Build})`, + type: 'pressable', +} + +export default HermesVersionSetting diff --git a/src/plugins/settings/definitions/ReactNativeVersion.tsx b/src/plugins/settings/definitions/ReactNativeVersion.tsx deleted file mode 100644 index 4543b23..0000000 --- a/src/plugins/settings/definitions/ReactNativeVersion.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { getAssetByName } from '@revenge-mod/assets' - -import { Components } from '@revenge-mod/discord/ui' -import { addSettingsRow } from '@revenge-mod/discord/ui/settings' - -import { React, ReactNative } from '@revenge-mod/react' - -import { REVENGE } from './Revenge' - -export const REACT_NATIVE_VERSION = 'REACT_NATIVE_VERSION' - -const { major, minor, patch, prerelease } = ReactNative.Platform.constants.reactNativeVersion -const version = `${major}.${minor}.${patch}${prerelease ? `-${prerelease}` : ''}` - -addSettingsRow(REACT_NATIVE_VERSION, { - parent: REVENGE, - IconComponent: () => , - title: () => 'React Native', - useDescription: () => version, - type: 'pressable', -}) diff --git a/src/plugins/settings/definitions/ReactNativeVersionSetting.tsx b/src/plugins/settings/definitions/ReactNativeVersionSetting.tsx new file mode 100644 index 0000000..5d644bf --- /dev/null +++ b/src/plugins/settings/definitions/ReactNativeVersionSetting.tsx @@ -0,0 +1,19 @@ +import { React, ReactNative } from '@revenge-mod/react' + +import AssetIcon from '../components/icons/AssetIcon' +import { MobileSetting } from '../SettingsConstants' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const { major, minor, patch, prerelease } = ReactNative.Platform.constants.reactNativeVersion +const version = `${major}.${minor}.${patch}${prerelease ? `-${prerelease}` : ''}` + +const ReactNativeVersionSetting: SettingsRowConfig = { + parent: MobileSetting.REVENGE, + IconComponent: () => , + title: () => 'React Native', + useDescription: () => version, + type: 'pressable', +} + +export default ReactNativeVersionSetting diff --git a/src/plugins/settings/definitions/ReactVersion.tsx b/src/plugins/settings/definitions/ReactVersionSetting.tsx similarity index 57% rename from src/plugins/settings/definitions/ReactVersion.tsx rename to src/plugins/settings/definitions/ReactVersionSetting.tsx index 6b10314..7d4748f 100644 --- a/src/plugins/settings/definitions/ReactVersion.tsx +++ b/src/plugins/settings/definitions/ReactVersionSetting.tsx @@ -1,18 +1,17 @@ import { getAssetByName } from '@revenge-mod/assets' - import { Components } from '@revenge-mod/discord/ui' -import { addSettingsRow } from '@revenge-mod/discord/ui/settings' - import { React } from '@revenge-mod/react' -import { REVENGE } from './Revenge' +import { MobileSetting } from '../SettingsConstants' -export const REACT_VERSION = 'REACT_VERSION' +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' -addSettingsRow(REACT_VERSION, { - parent: REVENGE, +const ReactVersionSetting: SettingsRowConfig = { + parent: MobileSetting.REVENGE, IconComponent: () => , title: () => 'React', useDescription: () => React.version, type: 'pressable', -}) +} + +export default ReactVersionSetting diff --git a/src/plugins/settings/definitions/Revenge.ts b/src/plugins/settings/definitions/Revenge.ts deleted file mode 100644 index 30a5f12..0000000 --- a/src/plugins/settings/definitions/Revenge.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { React } from '@revenge-mod/react' -import { addSettingsSection } from '@revenge-mod/discord/ui/settings' - -import RevengeIcon from '../components/icons/RevengeIcon' - -export const REVENGE = 'REVENGE' -const ROUTE = 'Revenge' - -addSettingsSection(REVENGE, { - label: 'Revenge', - settings: { - [REVENGE]: { - parent: null, - type: 'route', - IconComponent: RevengeIcon, - title: () => ROUTE, - useTrailing: () => `${__BUILD_VERSION__} (${__BUILD_COMMIT__}-${__BUILD_BRANCH__})`, - screen: { - route: ROUTE, - getComponent: () => React.lazy(() => import('../screens/RevengeSettingScreen')), - }, - }, - }, -}) diff --git a/src/plugins/settings/definitions/RevengeDeveloperSetting.tsx b/src/plugins/settings/definitions/RevengeDeveloperSetting.tsx new file mode 100644 index 0000000..384f3aa --- /dev/null +++ b/src/plugins/settings/definitions/RevengeDeveloperSetting.tsx @@ -0,0 +1,17 @@ +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeDeveloperSetting: SettingsRowConfig = { + parent: null, + type: 'route', + IconComponent: () => , + title: () => 'Developer', + screen: { + route: UserSettingsSections[MobileSetting.REVENGE_DEVELOPER], + getComponent: () => require('../screens/RevengeDeveloperSettingScreen').default, + }, +} + +export default RevengeDeveloperSetting diff --git a/src/plugins/settings/definitions/RevengeFontsSetting.tsx b/src/plugins/settings/definitions/RevengeFontsSetting.tsx new file mode 100644 index 0000000..d0c9a28 --- /dev/null +++ b/src/plugins/settings/definitions/RevengeFontsSetting.tsx @@ -0,0 +1,18 @@ +import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeFontsSetting: SettingsRowConfig = { + parent: null, + type: 'route', + IconComponent: () => , + title: () => 'Fonts', + usePredicate: AlwaysHidden, + screen: { + route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS], + getComponent: () => require('../screens/RevengePluginsSettingScreen').default, + }, +} + +export default RevengeFontsSetting diff --git a/src/plugins/settings/definitions/RevengeNotImplementedSetting.tsx b/src/plugins/settings/definitions/RevengeNotImplementedSetting.tsx new file mode 100644 index 0000000..6f995ef --- /dev/null +++ b/src/plugins/settings/definitions/RevengeNotImplementedSetting.tsx @@ -0,0 +1,18 @@ +import { React } from '@revenge-mod/react' + +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeNotImplementedSetting: SettingsRowConfig = { + parent: null, + IconComponent: () => , + title: () => 'Not Implemented', + useDescription: () => 'This feature is not implemented yet. Check back later!', + variant: 'danger', + type: 'pressable', + unsearchable: true, + useIsDisabled: () => true, +} + +export default RevengeNotImplementedSetting diff --git a/src/plugins/settings/definitions/RevengePluginsSetting.tsx b/src/plugins/settings/definitions/RevengePluginsSetting.tsx new file mode 100644 index 0000000..3bc30c7 --- /dev/null +++ b/src/plugins/settings/definitions/RevengePluginsSetting.tsx @@ -0,0 +1,21 @@ +import { getEnabledPluginsCount } from '@revenge-mod/plugins/_' + +import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengePluginsSetting: SettingsRowConfig = { + parent: null, + type: 'route', + IconComponent: () => , + title: () => 'Plugins', + useTrailing: () => `${getEnabledPluginsCount()} enabled`, + usePredicate: AlwaysHidden, + screen: { + route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS], + getComponent: () => require('../screens/RevengePluginsSettingScreen').default, + }, +} + +export default RevengePluginsSetting diff --git a/src/plugins/settings/definitions/RevengeSetting.tsx b/src/plugins/settings/definitions/RevengeSetting.tsx new file mode 100644 index 0000000..f7ec6bd --- /dev/null +++ b/src/plugins/settings/definitions/RevengeSetting.tsx @@ -0,0 +1,18 @@ +import RevengeIcon from '../components/icons/RevengeIcon' +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeSetting: SettingsRowConfig = { + parent: null, + type: 'route', + IconComponent: RevengeIcon, + title: () => 'Revenge', + useTrailing: () => `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__}`, + screen: { + route: UserSettingsSections[MobileSetting.REVENGE], + getComponent: () => require('../screens/RevengeSettingScreen').default, + }, +} + +export default RevengeSetting diff --git a/src/plugins/settings/definitions/RevengeThemesSetting.tsx b/src/plugins/settings/definitions/RevengeThemesSetting.tsx new file mode 100644 index 0000000..73f2d93 --- /dev/null +++ b/src/plugins/settings/definitions/RevengeThemesSetting.tsx @@ -0,0 +1,18 @@ +import { AlwaysHidden, MobileSetting, UserSettingsSections } from '../SettingsConstants' +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeThemesSetting: SettingsRowConfig = { + parent: null, + type: 'route', + IconComponent: () => , + title: () => 'Themes', + usePredicate: AlwaysHidden, + screen: { + route: UserSettingsSections[MobileSetting.REVENGE_THEMES], + getComponent: () => require('../screens/RevengeThemesSettingScreen').default, + }, +} + +export default RevengeThemesSetting diff --git a/src/plugins/settings/definitions/RevengeVersion.ts b/src/plugins/settings/definitions/RevengeVersion.ts deleted file mode 100644 index 245ec7c..0000000 --- a/src/plugins/settings/definitions/RevengeVersion.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { addSettingsRow } from '@revenge-mod/discord/ui/settings' - -import { REVENGE } from './Revenge' - -import RevengeIcon from '../components/icons/RevengeIcon' - -export const REVENGE_VERSION = 'REVENGE_VERSION' - -addSettingsRow(REVENGE_VERSION, { - parent: REVENGE, - IconComponent: RevengeIcon, - title: () => 'Revenge', - useDescription: () => `${__BUILD_VERSION__} (${__BUILD_COMMIT__}-${__BUILD_BRANCH__} ${__BUILD_ENV__})`, - type: 'pressable', -}) diff --git a/src/plugins/settings/definitions/RevengeVersionSetting.ts b/src/plugins/settings/definitions/RevengeVersionSetting.ts new file mode 100644 index 0000000..3fd341a --- /dev/null +++ b/src/plugins/settings/definitions/RevengeVersionSetting.ts @@ -0,0 +1,14 @@ +import RevengeIcon from '../components/icons/RevengeIcon' +import { MobileSetting } from '../SettingsConstants' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const RevengeVersionSetting: SettingsRowConfig = { + parent: MobileSetting.REVENGE, + IconComponent: RevengeIcon, + title: () => 'Revenge', + useDescription: () => `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__} (${__BUILD_ENV__})`, + type: 'pressable', +} + +export default RevengeVersionSetting diff --git a/src/plugins/settings/definitions/TriggerErrorBoundarySetting.tsx b/src/plugins/settings/definitions/TriggerErrorBoundarySetting.tsx new file mode 100644 index 0000000..751bf31 --- /dev/null +++ b/src/plugins/settings/definitions/TriggerErrorBoundarySetting.tsx @@ -0,0 +1,21 @@ +import { React } from '@revenge-mod/react' + +import AssetIcon from '../components/icons/AssetIcon' +import { MobileSetting, UserSettingsSections } from '../SettingsConstants' + +import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' + +const TriggerErrorBoundarySetting: SettingsRowConfig = { + parent: MobileSetting.REVENGE_DEVELOPER, + IconComponent: () => , + title: () => 'Trigger Error Boundary', + variant: 'danger', + useDescription: () => 'This will crash the app.', + type: 'route', + screen: { + route: UserSettingsSections[MobileSetting.TRIGGER_ERROR_BOUNDARY], + getComponent: () => require('../screens/TriggerErrorBoundarySettingScreen').default, + }, +} + +export default TriggerErrorBoundarySetting diff --git a/src/plugins/settings/index.ts b/src/plugins/settings/index.ts index f0bd837..23bebea 100644 --- a/src/plugins/settings/index.ts +++ b/src/plugins/settings/index.ts @@ -4,11 +4,26 @@ import { InternalPluginFlags, registerPlugin } from '@revenge-mod/plugins/_' import { waitForModules } from '@revenge-mod/modules/finders' import { byName, byProps } from '@revenge-mod/modules/finders/filters' +import { registerSetting, registerSettingsSection, type SettingsRowConfig } from '@revenge-mod/discord/ui/settings' import { _suiData } from '@revenge-mod/discord/_/ui/settings' import { after } from '@revenge-mod/patcher' -import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' +import { MobileSetting } from './SettingsConstants' + +import RevengeSetting from './definitions/RevengeSetting' +import RevengePluginsSetting from './definitions/RevengePluginsSetting' +import RevengeThemesSetting from './definitions/RevengeThemesSetting' +import RevengeFontsSetting from './definitions/RevengeFontsSetting' +import RevengeDeveloperSetting from './definitions/RevengeDeveloperSetting' +import ReactVersionSetting from './definitions/ReactVersionSetting' +import ReactNativeVersionSetting from './definitions/ReactNativeVersionSetting' +import RevengeVersionSetting from './definitions/RevengeVersionSetting' +import HermesVersionSetting from './definitions/HermesVersionSetting' +import CallGarbageCollectorSetting from './definitions/CallGarbageCollectorSetting' +import TriggerErrorBoundarySetting from './definitions/TriggerErrorBoundarySetting' +import RevengeNotImplementedSetting from './definitions/RevengeNotImplementedSetting' + import type { FC } from 'react' registerPlugin( @@ -21,7 +36,32 @@ registerPlugin( }, { start() { - require('./definitions/Revenge') + for (const [key, setting] of [ + [MobileSetting.REVENGE, RevengeSetting], + [MobileSetting.REVENGE_PLUGINS, RevengePluginsSetting], + [MobileSetting.REVENGE_THEMES, RevengeThemesSetting], + [MobileSetting.REVENGE_FONTS, RevengeFontsSetting], + [MobileSetting.REVENGE_DEVELOPER, RevengeDeveloperSetting], + [MobileSetting.REVENGE_VERSION, RevengeVersionSetting], + [MobileSetting.REACT_VERSION, ReactVersionSetting], + [MobileSetting.REACT_NATIVE_VERSION, ReactNativeVersionSetting], + [MobileSetting.HERMES_VERSION, HermesVersionSetting], + [MobileSetting.CALL_GARBAGE_COLLECTOR, CallGarbageCollectorSetting], + [MobileSetting.TRIGGER_ERROR_BOUNDARY, TriggerErrorBoundarySetting], + [MobileSetting.REVENGE_NOT_IMPLEMENTED, RevengeNotImplementedSetting], + ] as Array<[string, SettingsRowConfig]>) + registerSetting(key, setting) + + registerSettingsSection('REVENGE', { + label: 'Revenge', + settings: [ + MobileSetting.REVENGE, + MobileSetting.REVENGE_PLUGINS, + MobileSetting.REVENGE_THEMES, + MobileSetting.REVENGE_FONTS, + MobileSetting.REVENGE_DEVELOPER, + ], + }) const unsubForRendererConfig = waitForModules(byProps('SETTING_RENDERER_CONFIG'), (_, exports) => { unsubForRendererConfig() @@ -36,7 +76,7 @@ registerPlugin( get: () => ({ ...ORIGINAL_RENDERER_CONFIG, - ...getCustomConfig(), + ..._suiData.config, }) as Record, set: v => (ORIGINAL_RENDERER_CONFIG = v), }) @@ -67,15 +107,9 @@ registerPlugin( ) return tree - for (const section of Object.values(_suiData.sections)) { - const data = { - label: section.label, - settings: Object.keys(section.settings), - } - - if (!section.index) sections.unshift(data) - else sections.splice(section.index, 0, data) - } + for (const section of Object.values(_suiData.sections)) + if (!section.index) sections.unshift(section) + else sections.splice(section.index, 0, section) return tree }) @@ -89,9 +123,3 @@ registerPlugin( PluginFlags.Enabled, InternalPluginFlags.Internal | InternalPluginFlags.Essential, ) - -function getCustomConfig(): Record { - return [...Object.values(_suiData.sections), { label: '', settings: _suiData.settings }] - .map(section => section.settings) - .reduce((acc, settings) => Object.assign(acc, settings), {}) -} diff --git a/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx b/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx new file mode 100644 index 0000000..572eaf3 --- /dev/null +++ b/src/plugins/settings/screens/RevengeDeveloperSettingScreen.tsx @@ -0,0 +1,19 @@ +import { SettingListRenderer } from '@revenge-mod/discord/ui/settings' + +import { MobileSetting } from '../SettingsConstants' + +export default function RevengeDeveloperSettingScreen() { + return ( + + ) +} diff --git a/src/plugins/settings/screens/RevengeFontsSettingScreen.tsx b/src/plugins/settings/screens/RevengeFontsSettingScreen.tsx new file mode 100644 index 0000000..4acbb9e --- /dev/null +++ b/src/plugins/settings/screens/RevengeFontsSettingScreen.tsx @@ -0,0 +1,15 @@ +import { SettingListRenderer } from '@revenge-mod/discord/ui/settings' + +import { MobileSetting } from '../SettingsConstants' + +export default function RevengeFontsSettingScreen() { + return ( + + ) +} diff --git a/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx b/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx new file mode 100644 index 0000000..ad2e7f2 --- /dev/null +++ b/src/plugins/settings/screens/RevengePluginsSettingScreen.tsx @@ -0,0 +1,15 @@ +import { SettingListRenderer } from '@revenge-mod/discord/ui/settings' + +import { MobileSetting } from '../SettingsConstants' + +export default function RevengeSettingScreen() { + return ( + + ) +} diff --git a/src/plugins/settings/screens/RevengeSettingScreen.tsx b/src/plugins/settings/screens/RevengeSettingScreen.tsx index 2f29ae3..e80e221 100644 --- a/src/plugins/settings/screens/RevengeSettingScreen.tsx +++ b/src/plugins/settings/screens/RevengeSettingScreen.tsx @@ -1,16 +1,17 @@ import { SettingListRenderer } from '@revenge-mod/discord/ui/settings' - -import { REVENGE_VERSION } from '../definitions/RevengeVersion' -import { REACT_VERSION } from '../definitions/ReactVersion' -import { REACT_NATIVE_VERSION } from '../definitions/ReactNativeVersion' -import { HERMES_VERSION } from '../definitions/HermesVersion' +import { MobileSetting } from '../SettingsConstants' export default function RevengeSettingScreen() { return ( + ) +} diff --git a/src/plugins/settings/screens/TriggerErrorBoundarySettingScreen.tsx b/src/plugins/settings/screens/TriggerErrorBoundarySettingScreen.tsx new file mode 100644 index 0000000..2119358 --- /dev/null +++ b/src/plugins/settings/screens/TriggerErrorBoundarySettingScreen.tsx @@ -0,0 +1,4 @@ +export default function TriggerErrorBoundarySettingScreen() { + // @ts-expect-error: This is intentional + return +}