From 65abd86acb3499f78d8028a99aacee7ed2ceee28 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Thu, 8 May 2025 19:04:28 +0700 Subject: [PATCH] feat(plugins/settings): register custom page as route --- src/plugins/settings/constants.ts | 2 ++ .../definitions/RevengeCustomPageSetting.tsx | 16 ++++++++++++++ src/plugins/settings/register.ts | 8 ++++--- .../screens/RevengeCustomPageScreen.tsx | 22 +++++++++++++++++++ src/plugins/settings/types.ts | 16 ++++++++++++++ 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/plugins/settings/definitions/RevengeCustomPageSetting.tsx create mode 100644 src/plugins/settings/screens/RevengeCustomPageScreen.tsx create mode 100644 src/plugins/settings/types.ts diff --git a/src/plugins/settings/constants.ts b/src/plugins/settings/constants.ts index 841af60..fe4c1f9 100644 --- a/src/plugins/settings/constants.ts +++ b/src/plugins/settings/constants.ts @@ -5,6 +5,7 @@ export const MobileSetting = { REVENGE_PLUGINS: 'REVENGE_PLUGINS', REVENGE_THEMES: 'REVENGE_THEMES', REVENGE_FONTS: 'REVENGE_FONTS', + REVENGE_CUSTOM_PAGE: 'REVENGE_CUSTOM_PAGE', // SUBSETTINGS @@ -25,4 +26,5 @@ export const UserSettingsSections = { [MobileSetting.REVENGE_PLUGINS]: 'Revenge Plugins', [MobileSetting.REVENGE_THEMES]: 'Revenge Themes', [MobileSetting.REVENGE_FONTS]: 'Revenge Fonts', + [MobileSetting.REVENGE_CUSTOM_PAGE]: 'Revenge Custom Page', } as const diff --git a/src/plugins/settings/definitions/RevengeCustomPageSetting.tsx b/src/plugins/settings/definitions/RevengeCustomPageSetting.tsx new file mode 100644 index 0000000..47a1a76 --- /dev/null +++ b/src/plugins/settings/definitions/RevengeCustomPageSetting.tsx @@ -0,0 +1,16 @@ +import { MobileSetting, UserSettingsSections } from '../constants' + +import type { SettingsItem } from '@revenge-mod/discord/modules/settings' + +const RevengeCustomPageSetting: SettingsItem = { + parent: null, + title: () => 'Revenge Custom Page', + type: 'route', + unsearchable: true, + screen: { + route: UserSettingsSections[MobileSetting.REVENGE_CUSTOM_PAGE], + getComponent: () => require('../screens/RevengeCustomPageScreen').default, + }, +} + +export default RevengeCustomPageSetting diff --git a/src/plugins/settings/register.ts b/src/plugins/settings/register.ts index ed99870..4d5e907 100644 --- a/src/plugins/settings/register.ts +++ b/src/plugins/settings/register.ts @@ -4,11 +4,12 @@ import { MobileSetting } from './constants' import HermesVersionSetting from './definitions/HermesVersionSetting' import ReactNativeVersionSetting from './definitions/ReactNativeVersionSetting' -// import RevengePluginsSetting from './definitions/RevengePluginsSetting' +import RevengePluginsSetting from './definitions/RevengePluginsSetting' // import RevengeThemesSetting from './definitions/RevengeThemesSetting' // import RevengeFontsSetting from './definitions/RevengeFontsSetting' import ReactVersionSetting from './definitions/ReactVersionSetting' import ReloadAppSetting from './definitions/ReloadAppSetting' +import RevengeCustomPageSetting from './definitions/RevengeCustomPageSetting' import RevengeDiscordServerSetting from './definitions/RevengeDiscordServerSetting' import RevengeGitHubOrganizationSetting from './definitions/RevengeGitHubOrganizationSetting' import RevengeNotImplementedSetting from './definitions/RevengeNotImplementedSetting' @@ -17,9 +18,10 @@ import RevengeVersionSetting from './definitions/RevengeVersionSetting' registerSettingsItems({ [MobileSetting.REVENGE]: RevengeSetting, - // [MobileSetting.REVENGE_PLUGINS]: RevengePluginsSetting, + [MobileSetting.REVENGE_PLUGINS]: RevengePluginsSetting, // [MobileSetting.REVENGE_THEMES]: RevengeThemesSetting, // [MobileSetting.REVENGE_FONTS]: RevengeFontsSetting, + [MobileSetting.REVENGE_CUSTOM_PAGE]: RevengeCustomPageSetting, [MobileSetting.REVENGE_GITHUB_ORGANIZATION]: RevengeGitHubOrganizationSetting, [MobileSetting.REVENGE_DISCORD_SERVER]: RevengeDiscordServerSetting, [MobileSetting.RELOAD_APP]: ReloadAppSetting, @@ -34,7 +36,7 @@ registerSettingsSection('REVENGE', { label: 'Revenge', settings: [ MobileSetting.REVENGE, - // MobileSetting.REVENGE_PLUGINS, + MobileSetting.REVENGE_PLUGINS, // MobileSetting.REVENGE_THEMES, // MobileSetting.REVENGE_FONTS, ], diff --git a/src/plugins/settings/screens/RevengeCustomPageScreen.tsx b/src/plugins/settings/screens/RevengeCustomPageScreen.tsx new file mode 100644 index 0000000..38e2c5a --- /dev/null +++ b/src/plugins/settings/screens/RevengeCustomPageScreen.tsx @@ -0,0 +1,22 @@ +import { React } from '@revenge-mod/react' + +import type { ReactNavigationParamList } from '@revenge-mod/externals/react-navigation' +import type { StackScreenProps } from '@react-navigation/stack' + +import type { MobileSetting, UserSettingsSections } from '../constants' + +export default function RevengeCustomPageScreen({ + route, + navigation, +}: StackScreenProps< + ReactNavigationParamList, + (typeof UserSettingsSections)[(typeof MobileSetting)['REVENGE_CUSTOM_PAGE']] +>) { + const { render: PageComponent, options } = route.params + + React.useEffect(() => { + if (options) navigation.setOptions(options) + }, []) + + return +} diff --git a/src/plugins/settings/types.ts b/src/plugins/settings/types.ts new file mode 100644 index 0000000..ac64e1d --- /dev/null +++ b/src/plugins/settings/types.ts @@ -0,0 +1,16 @@ +import type { StackNavigationOptions } from '@react-navigation/stack' +import type { ComponentType } from 'react' +import type { MobileSetting, UserSettingsSections } from './constants' + +declare module '@revenge-mod/externals/react-navigation' { + interface ReactNavigationParamList extends RevengeSettingsParamList {} +} + +type RevengeSettingsParamList = { + [K in (typeof UserSettingsSections)[keyof typeof UserSettingsSections]]: object +} & { + [K in (typeof UserSettingsSections)[(typeof MobileSetting)['REVENGE_CUSTOM_PAGE']]]: { + render: ComponentType + options?: StackNavigationOptions + } +}