From 74ac2f355c954d39fc79e4bfab5f161411c0d8bd Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Tue, 15 Jul 2025 22:04:32 +0700 Subject: [PATCH] feat(plugins): make some setting items copyable --- .../definitions/RDTVersionSetting.tsx | 18 +++++++------- .../definitions/ReactNativeVersionSetting.tsx | 24 ++++++++++--------- .../definitions/ReactVersionSetting.tsx | 16 +++++++------ .../definitions/RevengeVersionSetting.tsx | 16 +++++++------ .../start/settings/definitions/shared.ts | 23 ++++++++++++++++++ 5 files changed, 64 insertions(+), 33 deletions(-) create mode 100644 src/plugins/start/settings/definitions/shared.ts diff --git a/src/plugins/start/developer-settings/definitions/RDTVersionSetting.tsx b/src/plugins/start/developer-settings/definitions/RDTVersionSetting.tsx index f818e2a..674b218 100644 --- a/src/plugins/start/developer-settings/definitions/RDTVersionSetting.tsx +++ b/src/plugins/start/developer-settings/definitions/RDTVersionSetting.tsx @@ -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: () => , - title: () => 'React DevTools', - useDescription: () => __REACT_DEVTOOLS__!.version, - usePredicate: () => RDTContext.active, - type: 'static', -} +const RDTVersionSetting: SettingsItem = CopyableSetting( + { + parent: Setting.RevengeDeveloper, + IconComponent: () => , + title: () => 'React DevTools', + usePredicate: () => RDTContext.active, + }, + () => __REACT_DEVTOOLS__!.version, +) export default RDTVersionSetting diff --git a/src/plugins/start/settings/definitions/ReactNativeVersionSetting.tsx b/src/plugins/start/settings/definitions/ReactNativeVersionSetting.tsx index 8623ad7..e83af6d 100644 --- a/src/plugins/start/settings/definitions/ReactNativeVersionSetting.tsx +++ b/src/plugins/start/settings/definitions/ReactNativeVersionSetting.tsx @@ -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: () => , - title: () => 'React Native', - useDescription: () => version, - type: 'static', -} +const ReactNativeVersionSetting: SettingsItem = CopyableSetting( + { + parent: Setting.Revenge, + IconComponent: () => , + title: () => 'React Native', + }, + // slice "for RN " off the version string + () => ossReleaseVersion.slice(7), +) export default ReactNativeVersionSetting diff --git a/src/plugins/start/settings/definitions/ReactVersionSetting.tsx b/src/plugins/start/settings/definitions/ReactVersionSetting.tsx index 312125d..9e24b4b 100644 --- a/src/plugins/start/settings/definitions/ReactVersionSetting.tsx +++ b/src/plugins/start/settings/definitions/ReactVersionSetting.tsx @@ -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: () => , - title: () => 'React', - useDescription: () => version, - type: 'static', -} +const ReactVersionSetting: SettingsItem = CopyableSetting( + { + parent: Setting.Revenge, + IconComponent: () => , + title: () => 'React', + }, + () => version, +) export default ReactVersionSetting diff --git a/src/plugins/start/settings/definitions/RevengeVersionSetting.tsx b/src/plugins/start/settings/definitions/RevengeVersionSetting.tsx index 0778e3c..3618cdf 100644 --- a/src/plugins/start/settings/definitions/RevengeVersionSetting.tsx +++ b/src/plugins/start/settings/definitions/RevengeVersionSetting.tsx @@ -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: () => , - title: () => 'Revenge', - useDescription: () => `${FullVersion} (${BuildEnvironment})`, - type: 'static', -} +const RevengeVersionSetting: SettingsItem = CopyableSetting( + { + parent: Setting.Revenge, + IconComponent: () => , + title: () => 'Revenge', + }, + () => `${FullVersion} (${BuildEnvironment})`, +) export default RevengeVersionSetting diff --git a/src/plugins/start/settings/definitions/shared.ts b/src/plugins/start/settings/definitions/shared.ts new file mode 100644 index 0000000..f660c64 --- /dev/null +++ b/src/plugins/start/settings/definitions/shared.ts @@ -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, + 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, + }) + }, +})