feat(plugins): make some setting items copyable

This commit is contained in:
PalmDevs 2025-07-15 22:04:32 +07:00
parent ab8e2a5772
commit 74ac2f355c
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
5 changed files with 64 additions and 33 deletions

View file

@ -1,15 +1,17 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
import { CopyableSetting } from '~/plugins/start/settings/definitions/shared'
import { Setting } from '../constants'
import { RDTContext } from '../react-devtools'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RDTVersionSetting: SettingsItem = {
parent: Setting.RevengeDeveloper,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React DevTools',
useDescription: () => __REACT_DEVTOOLS__!.version,
usePredicate: () => RDTContext.active,
type: 'static',
}
const RDTVersionSetting: SettingsItem = CopyableSetting(
{
parent: Setting.RevengeDeveloper,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React DevTools',
usePredicate: () => RDTContext.active,
},
() => __REACT_DEVTOOLS__!.version,
)
export default RDTVersionSetting

View file

@ -1,18 +1,20 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
import { Platform } from 'react-native'
import { Setting } from '../constants'
import { CopyableSetting } from './shared'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const { major, minor, patch, prerelease } =
Platform.constants.reactNativeVersion
const version = `${major}.${minor}.${patch}${prerelease ? `-${prerelease}` : ''}`
const { 'OSS Release Version': ossReleaseVersion } =
// @ts-expect-error
HermesInternal.getRuntimeProperties()
const ReactNativeVersionSetting: SettingsItem = {
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React Native',
useDescription: () => version,
type: 'static',
}
const ReactNativeVersionSetting: SettingsItem = CopyableSetting(
{
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React Native',
},
// slice "for RN " off the version string
() => ossReleaseVersion.slice(7),
)
export default ReactNativeVersionSetting

View file

@ -1,14 +1,16 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
import { version } from 'react'
import { Setting } from '../constants'
import { CopyableSetting } from './shared'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReactVersionSetting: SettingsItem = {
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React',
useDescription: () => version,
type: 'static',
}
const ReactVersionSetting: SettingsItem = CopyableSetting(
{
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React',
},
() => version,
)
export default ReactVersionSetting

View file

@ -2,14 +2,16 @@ import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
import { BuildEnvironment, FullVersion } from '~/constants'
import RevengeIcon from '~assets/RevengeIcon'
import { Setting } from '../constants'
import { CopyableSetting } from './shared'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeVersionSetting: SettingsItem = {
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon id={RevengeIcon} />,
title: () => 'Revenge',
useDescription: () => `${FullVersion} (${BuildEnvironment})`,
type: 'static',
}
const RevengeVersionSetting: SettingsItem = CopyableSetting(
{
parent: Setting.Revenge,
IconComponent: () => <TableRowAssetIcon id={RevengeIcon} />,
title: () => 'Revenge',
},
() => `${FullVersion} (${BuildEnvironment})`,
)
export default RevengeVersionSetting

View file

@ -0,0 +1,23 @@
import { ToastActionCreators } from '@revenge-mod/discord/actions'
import { Clipboard } from '@revenge-mod/externals/react-native-clipboard'
import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const CopyIcon = lookupGeneratedIconComponent('CopyIcon')
export const CopyableSetting = (
item: Omit<SettingsItem, 'type' | 'onClick'>,
description: () => string,
): SettingsItem => ({
...item,
useDescription: item.useDescription ?? (() => description()),
type: 'pressable',
onPress() {
Clipboard.setString(description())
ToastActionCreators.open({
key: 'REVENGE_SETTING_COPIED',
content: 'Copied to clipboard',
IconComponent: CopyIcon,
})
},
})