chore(plugins/settings): cleanup
This commit is contained in:
parent
005931e338
commit
832a3fc7da
11 changed files with 63 additions and 150 deletions
|
|
@ -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}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -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}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -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],
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer'
|
||||
|
||||
export default function RevengeFontsSettingScreen() {
|
||||
return (
|
||||
<SettingListRenderer.SettingsList
|
||||
sections={[
|
||||
{
|
||||
settings: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings/renderer'
|
||||
|
||||
export default function RevengeThemesSettingScreen() {
|
||||
return (
|
||||
<SettingListRenderer.SettingsList
|
||||
sections={[
|
||||
{
|
||||
settings: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue