diff --git a/src/plugins/init/settings/components/NavigatorHeaderWithIcon.tsx b/src/plugins/init/settings/components/NavigatorHeaderWithIcon.tsx new file mode 100644 index 0000000..df090b5 --- /dev/null +++ b/src/plugins/init/settings/components/NavigatorHeaderWithIcon.tsx @@ -0,0 +1,43 @@ +import { getAssetIdByName } from '@revenge-mod/assets' +import { Tokens } from '@revenge-mod/discord/common' +import { Stores } from '@revenge-mod/discord/common/flux' +import { Design } from '@revenge-mod/discord/design' +import { Image } from 'react-native' +import type { DiscordModules } from '@revenge-mod/discord/types' + +const { NavigatorHeader } = Design +const { default: tokens } = Tokens + +const ThemeStore = Stores.ThemeStore as DiscordModules.Flux.Store<{ + theme: string +}> + +interface NavigatorHeaderWithIconProps { + title: string + icon: string +} + +export default function NavigatorHeaderWithIcon({ + title, + icon, +}: NavigatorHeaderWithIconProps) { + return ( + + } + title={title} + /> + ) +} diff --git a/src/plugins/init/settings/components/PluginCard.tsx b/src/plugins/init/settings/components/PluginCard.tsx index 20dea64..53f852b 100644 --- a/src/plugins/init/settings/components/PluginCard.tsx +++ b/src/plugins/init/settings/components/PluginCard.tsx @@ -3,6 +3,7 @@ import { styles } from '@revenge-mod/components/_' import FormSwitch from '@revenge-mod/components/FormSwitch' import { Tokens } from '@revenge-mod/discord/common' import { Design } from '@revenge-mod/discord/design' +import { RootNavigationRef } from '@revenge-mod/discord/modules/main_tabs_v2' import { enablePlugin, InternalPluginFlags, @@ -12,7 +13,6 @@ import { } from '@revenge-mod/plugins/_' import { Image, Pressable } from 'react-native' import { useClickOutside } from 'react-native-click-outside' -import { navigatePluginSettings } from '../utils' import { enableTooltipTarget, essentialTooltipTarget, @@ -94,7 +94,9 @@ export function InstalledPluginCard({ variant="secondary" icon={SettingsIcon} onPress={() => { - navigatePluginSettings(plugin) + RootNavigationRef.getRootNavigationRef().navigate( + plugin.manifest.id, + ) }} disabled={!enabled} /> diff --git a/src/plugins/init/settings/constants.ts b/src/plugins/init/settings/constants.ts index 77c4e2b..944c1cb 100644 --- a/src/plugins/init/settings/constants.ts +++ b/src/plugins/init/settings/constants.ts @@ -3,8 +3,6 @@ export const Setting = { Revenge: 'Revenge', RevengePlugins: 'RevengePlugins', - RevengeThemes: 'RevengeThemes', - RevengeFonts: 'RevengeFonts', // SUBSETTINGS @@ -22,6 +20,4 @@ export const Setting = { export const RouteNames = { [Setting.Revenge]: 'Revenge', [Setting.RevengePlugins]: 'Revenge Plugins', - [Setting.RevengeThemes]: 'Revenge Themes', - [Setting.RevengeFonts]: 'Revenge Fonts', } as const diff --git a/src/plugins/init/settings/definitions/RevengeFontsSetting.tsx b/src/plugins/init/settings/definitions/RevengeFontsSetting.tsx deleted file mode 100644 index 85db888..0000000 --- a/src/plugins/init/settings/definitions/RevengeFontsSetting.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon' -import { RouteNames, Setting } from '../constants' -import type { SettingsItem } from '@revenge-mod/discord/modules/settings' - -const RevengeFontsSetting: SettingsItem = { - parent: null, - type: 'route', - IconComponent: () => , - title: () => 'Fonts', - screen: { - route: RouteNames[Setting.RevengePlugins], - getComponent: () => - require('../screens/RevengePluginsSettingScreen').default, - }, -} - -export default RevengeFontsSetting diff --git a/src/plugins/init/settings/definitions/RevengeThemesSetting.tsx b/src/plugins/init/settings/definitions/RevengeThemesSetting.tsx deleted file mode 100644 index 574bfaa..0000000 --- a/src/plugins/init/settings/definitions/RevengeThemesSetting.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon' -import { RouteNames, Setting } from '../constants' -import type { SettingsItem } from '@revenge-mod/discord/modules/settings' - -const RevengeThemesSetting: SettingsItem = { - parent: null, - type: 'route', - IconComponent: () => , - title: () => 'Themes', - screen: { - route: RouteNames[Setting.RevengeThemes], - getComponent: () => - require('../screens/RevengeThemesSettingScreen').default, - }, -} - -export default RevengeThemesSetting diff --git a/src/plugins/init/settings/index.ts b/src/plugins/init/settings/index.ts index 33d9356..6a8772c 100644 --- a/src/plugins/init/settings/index.ts +++ b/src/plugins/init/settings/index.ts @@ -13,7 +13,7 @@ import { PluginFlags } from '@revenge-mod/plugins/constants' import type { SettingsItem } from '@revenge-mod/discord/modules/settings' import type { FC } from 'react' -import './routes' +import './register-routes' onSettingsModulesLoaded(() => { require('./register') @@ -28,7 +28,7 @@ registerPlugin( icon: 'SettingsIcon', }, { - start({ logger }) { + start() { const unsubRC = waitForModules( byProps<{ SETTING_RENDERER_CONFIG: Record @@ -36,19 +36,10 @@ registerPlugin( SettingRendererConfig => { unsubRC() - logger.info( - 'Settings modules loaded, running subscriptions and patching...', - ) - for (const sub of sSubscriptions) try { sub() - } catch (e) { - logger.error( - 'Failed to run settings modules subscription', - e, - ) - } + } catch {} // We don't ever need to call this again sSubscriptions.clear() @@ -97,19 +88,15 @@ registerPlugin( if (!firstCustomSection) return tree // Check if sections are already spliced - const firstCustomItem = firstCustomSection.settings[0] + const [firstCustomItem] = firstCustomSection.settings if ( sections.findIndex(section => - section.settings.some( - setting => setting === firstCustomItem, - ), - ) !== -1 + section.settings.includes(firstCustomItem), + ) < 0 ) - return tree - - for (const section of Object.values(customSections)) - if (!section.index) sections.unshift(section) - else sections.splice(section.index, 0, section) + for (const section of Object.values(customSections)) + if (!section.index) sections.unshift(section) + else sections.splice(section.index, 0, section) return tree }) diff --git a/src/plugins/init/settings/routes.tsx b/src/plugins/init/settings/register-routes.tsx similarity index 63% rename from src/plugins/init/settings/routes.tsx rename to src/plugins/init/settings/register-routes.tsx index 1a52d35..41fb5f5 100644 --- a/src/plugins/init/settings/routes.tsx +++ b/src/plugins/init/settings/register-routes.tsx @@ -1,24 +1,15 @@ -import { getAssetIdByName } from '@revenge-mod/assets' import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon' -import { Tokens } from '@revenge-mod/discord/common' -import { Stores } from '@revenge-mod/discord/common/flux' -import { Design } from '@revenge-mod/discord/design' import { registerSettingsItem } from '@revenge-mod/discord/modules/settings' import { pEmitter, pMetadata } from '@revenge-mod/plugins/_' -import { useLayoutEffect } from 'react' -import { Image } from 'react-native' +import { lazy, useLayoutEffect } from 'react' import { Setting } from './constants' import type { StackScreenProps } from '@react-navigation/stack' -import type { DiscordModules } from '@revenge-mod/discord/types' import type { ReactNavigationParamList } from '@revenge-mod/externals/react-navigation' import type { PluginApi } from '@revenge-mod/plugins/types' -const { NavigatorHeader } = Design -const { default: tokens } = Tokens - -const ThemeStore = Stores.ThemeStore as DiscordModules.Flux.Store<{ - theme: string -}> +const NavigatorHeaderWithIcon = lazy( + () => import('./components/NavigatorHeaderWithIcon'), +) pEmitter.on('started', plugin => { if (plugin.SettingsComponent) { @@ -62,34 +53,8 @@ pEmitter.on('started', plugin => { getComponent: () => PluginSettings, }, }), + // TODO(PalmDevs): In the future, we may allow pinning plugin settings, so we'll need this cleanup + // () => refreshSettingsOverviewScreen(), ) } }) - -function NavigatorHeaderWithIcon({ - title, - icon, -}: { - title: string - icon?: string -}) { - return ( - - } - title={title} - /> - ) -} diff --git a/src/plugins/init/settings/register.tsx b/src/plugins/init/settings/register.tsx index 40cd37f..bc48476 100644 --- a/src/plugins/init/settings/register.tsx +++ b/src/plugins/init/settings/register.tsx @@ -5,8 +5,6 @@ import { import { Setting } from './constants' import HermesVersionSetting from './definitions/HermesVersionSetting' import ReactNativeVersionSetting from './definitions/ReactNativeVersionSetting' -// import RevengeThemesSetting from './definitions/RevengeThemesSetting' -// import RevengeFontsSetting from './definitions/RevengeFontsSetting' import ReactVersionSetting from './definitions/ReactVersionSetting' import ReloadSetting from './definitions/ReloadSetting' import RevengeDiscordSetting from './definitions/RevengeDiscordSetting' @@ -19,8 +17,6 @@ import RevengeVersionSetting from './definitions/RevengeVersionSetting' registerSettingsItems({ [Setting.Revenge]: RevengeSetting, [Setting.RevengePlugins]: RevengePluginsSetting, - // [MobileSetting.REVENGE_THEMES]: RevengeThemesSetting, - // [MobileSetting.REVENGE_FONTS]: RevengeFontsSetting, [Setting.RevengeSourceRepository]: RevengeSourceRepositorySetting, [Setting.RevengeLicense]: RevengeLicenseSetting, [Setting.RevengeDiscord]: RevengeDiscordSetting, @@ -33,10 +29,5 @@ registerSettingsItems({ registerSettingsSection('REVENGE', { label: 'Revenge', - settings: [ - Setting.Revenge, - Setting.RevengePlugins, - // MobileSetting.RevengeThemes, - // MobileSetting.RevengeFonts, - ], + settings: [Setting.Revenge, Setting.RevengePlugins], }) diff --git a/src/plugins/init/settings/screens/RevengeFontsSettingScreen.tsx b/src/plugins/init/settings/screens/RevengeFontsSettingScreen.tsx deleted file mode 100644 index 28169a9..0000000 --- a/src/plugins/init/settings/screens/RevengeFontsSettingScreen.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer' - -export default function RevengeFontsSettingScreen() { - return ( - - ) -} diff --git a/src/plugins/init/settings/screens/RevengeThemesSettingScreen.tsx b/src/plugins/init/settings/screens/RevengeThemesSettingScreen.tsx deleted file mode 100644 index 11347a9..0000000 --- a/src/plugins/init/settings/screens/RevengeThemesSettingScreen.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer' - -export default function RevengeThemesSettingScreen() { - return ( - - ) -} diff --git a/src/plugins/init/settings/utils.tsx b/src/plugins/init/settings/utils.tsx deleted file mode 100644 index 87fa221..0000000 --- a/src/plugins/init/settings/utils.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { RootNavigationRef } from '@revenge-mod/discord/modules/main_tabs_v2' -import type { ReactNavigationParamList } from '@revenge-mod/externals/react-navigation' -import type { Plugin } from '@revenge-mod/plugins/types' - -export function navigatePluginSettings(plugin: Plugin) { - const navigation = - RootNavigationRef.getRootNavigationRef() - if (!navigation.isReady()) return - - navigation.navigate(plugin.manifest.id) -}