From 2da5549cad553f26e2e51a688ce6de573aa360f2 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Fri, 18 Jul 2025 01:17:12 +0700 Subject: [PATCH] feat(plugins/developer-settings): add "Test ErrorBoundary" option --- .../start/developer-settings/constants.ts | 2 ++ .../definitions/TestErrorBoundarySetting.tsx | 20 +++++++++++++++++++ .../screens/RevengeDeveloperSettingScreen.tsx | 6 +++++- .../TestErrorBoundarySettingScreen.tsx | 12 +++++++++++ src/plugins/start/developer-settings/utils.ts | 2 ++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/plugins/start/developer-settings/definitions/TestErrorBoundarySetting.tsx create mode 100644 src/plugins/start/developer-settings/screens/TestErrorBoundarySettingScreen.tsx diff --git a/src/plugins/start/developer-settings/constants.ts b/src/plugins/start/developer-settings/constants.ts index 28192f6..6e92bba 100644 --- a/src/plugins/start/developer-settings/constants.ts +++ b/src/plugins/start/developer-settings/constants.ts @@ -11,9 +11,11 @@ export const Setting = { RDTDisconnect: 'RDTDisconnect', EvalJS: 'EvalJS', AssetBrowser: 'AssetBrowser', + TestErrorBoundary: 'TestErrorBoundary', } as const export const RouteNames = { [Setting.RevengeDeveloper]: 'Revenge Developer', [Setting.AssetBrowser]: 'Asset Browser', + [Setting.TestErrorBoundary]: 'Test ErrorBoundary', } as const diff --git a/src/plugins/start/developer-settings/definitions/TestErrorBoundarySetting.tsx b/src/plugins/start/developer-settings/definitions/TestErrorBoundarySetting.tsx new file mode 100644 index 0000000..846b348 --- /dev/null +++ b/src/plugins/start/developer-settings/definitions/TestErrorBoundarySetting.tsx @@ -0,0 +1,20 @@ +import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon' +import { RouteNames, Setting } from '../constants' +import type { SettingsItem } from '@revenge-mod/discord/modules/settings' + +const TestErrorBoundarySetting: SettingsItem = { + parent: Setting.RevengeDeveloper, + type: 'route', + variant: 'danger', + IconComponent: () => ( + + ), + title: () => 'Test ErrorBoundary', + screen: { + route: RouteNames[Setting.TestErrorBoundary], + getComponent: () => + require('../screens/TestErrorBoundarySettingScreen').default, + }, +} + +export default TestErrorBoundarySetting diff --git a/src/plugins/start/developer-settings/screens/RevengeDeveloperSettingScreen.tsx b/src/plugins/start/developer-settings/screens/RevengeDeveloperSettingScreen.tsx index 49e3abc..d9dfef6 100644 --- a/src/plugins/start/developer-settings/screens/RevengeDeveloperSettingScreen.tsx +++ b/src/plugins/start/developer-settings/screens/RevengeDeveloperSettingScreen.tsx @@ -34,7 +34,11 @@ export default function RevengeDeveloperSettingScreen() { }, { label: 'Tools', - settings: [Setting.EvalJS, Setting.AssetBrowser], + settings: [ + Setting.EvalJS, + Setting.AssetBrowser, + Setting.TestErrorBoundary, + ], }, ]} /> diff --git a/src/plugins/start/developer-settings/screens/TestErrorBoundarySettingScreen.tsx b/src/plugins/start/developer-settings/screens/TestErrorBoundarySettingScreen.tsx new file mode 100644 index 0000000..72c5024 --- /dev/null +++ b/src/plugins/start/developer-settings/screens/TestErrorBoundarySettingScreen.tsx @@ -0,0 +1,12 @@ +import { useEffect } from 'react' + +export default function TestErrorBoundarySettingScreen() { + let x = 0 + + useEffect(() => { + x++ + }) + + // @ts-expect-error: Intentional + return x < 2 ? : null +} diff --git a/src/plugins/start/developer-settings/utils.ts b/src/plugins/start/developer-settings/utils.ts index 7a953a8..66964cf 100644 --- a/src/plugins/start/developer-settings/utils.ts +++ b/src/plugins/start/developer-settings/utils.ts @@ -11,6 +11,7 @@ import RDTConnectSetting from './definitions/RDTConnectSetting' import RDTDisconnectSetting from './definitions/RDTDisconnectSetting' import RDTVersionSetting from './definitions/RDTVersionSetting' import RevengeDeveloperSetting from './definitions/RevengeDeveloperSetting' +import TestErrorBoundarySetting from './definitions/TestErrorBoundarySetting' export function register() { api.cleanup( @@ -22,6 +23,7 @@ export function register() { [Setting.RDTDisconnect]: RDTDisconnectSetting, [Setting.EvalJS]: EvalJSSetting, [Setting.AssetBrowser]: AssetBrowserSetting, + [Setting.TestErrorBoundary]: TestErrorBoundarySetting, }), addSettingsItemToSection('REVENGE', Setting.RevengeDeveloper), )