feat(plugins): make some setting items copyable
This commit is contained in:
parent
ab8e2a5772
commit
74ac2f355c
5 changed files with 64 additions and 33 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
23
src/plugins/start/settings/definitions/shared.ts
Normal file
23
src/plugins/start/settings/definitions/shared.ts
Normal 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,
|
||||
})
|
||||
},
|
||||
})
|
||||
Loading…
Add table
Reference in a new issue