chore(plugins/settings): cleanup

This commit is contained in:
PalmDevs 2025-07-19 14:45:16 +07:00
parent 005931e338
commit 832a3fc7da
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
11 changed files with 63 additions and 150 deletions

View file

@ -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 (
<NavigatorHeader
icon={
<Image
style={{
width: 24,
height: 24,
marginEnd: 8,
tintColor: tokens.internal.resolveSemanticColor(
ThemeStore.theme,
tokens.colors.HEADER_PRIMARY,
),
}}
source={getAssetIdByName(icon!)}
/>
}
title={title}
/>
)
}

View file

@ -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}
/>

View file

@ -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

View file

@ -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: () => <TableRowAssetIcon name="TextIcon" />,
title: () => 'Fonts',
screen: {
route: RouteNames[Setting.RevengePlugins],
getComponent: () =>
require('../screens/RevengePluginsSettingScreen').default,
},
}
export default RevengeFontsSetting

View file

@ -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: () => <TableRowAssetIcon name="PaintPaletteIcon" />,
title: () => 'Themes',
screen: {
route: RouteNames[Setting.RevengeThemes],
getComponent: () =>
require('../screens/RevengeThemesSettingScreen').default,
},
}
export default RevengeThemesSetting

View file

@ -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<string, SettingsItem>
@ -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
})

View file

@ -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 (
<NavigatorHeader
icon={
<Image
style={{
width: 24,
height: 24,
marginEnd: 8,
tintColor: tokens.internal.resolveSemanticColor(
ThemeStore.theme,
tokens.colors.HEADER_PRIMARY,
),
}}
source={getAssetIdByName(icon!)}
/>
}
title={title}
/>
)
}

View file

@ -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],
})

View file

@ -1,13 +0,0 @@
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer'
export default function RevengeFontsSettingScreen() {
return (
<SettingListRenderer.SettingsList
sections={[
{
settings: [],
},
]}
/>
)
}

View file

@ -1,13 +0,0 @@
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer'
export default function RevengeThemesSettingScreen() {
return (
<SettingListRenderer.SettingsList
sections={[
{
settings: [],
},
]}
/>
)
}

View file

@ -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<ReactNavigationParamList>()
if (!navigation.isReady()) return
navigation.navigate(plugin.manifest.id)
}