revenge-bundle-next/src/plugins/start/settings.plugins/components/PluginHasDependentsAlert.tsx

65 lines
2 KiB
TypeScript
Raw Normal View History

import { Design } from '@revenge-mod/discord/design'
feat!: new repo system + versioning system support + bug fixes BREAKING CHANGES: - New versioning system: Allowing any amount of number segments, with prerelease support. - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ... - Prerelease labels are compared "digit-run", similar to Debian. - Plugins must specify a version. - User-facing plugins should use CalVer. API plugins should use SemVer. Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly. - Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system) - Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version). - Manifest now requires a format version (currently `1`) New APIs: - lib/plugins/utils: Utilities to format versioning Features: - New repo system: Repository design is inspired by Linux package repositories. - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins. - New dependency system: Plugins are versioned, and shouldn't break when updates come. Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates. Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required. Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again. - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side. - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification. - Local indexes are updated against remote indexes. Dependency checking always uses local indexes. - Users can add custom repositories and custom their priority order. URL is the identity. - Plugins can now have custom data URI icons instead of being restricted to React Native app assets. - External plugin installs require UI confirmation before installing. - Pending Update and Pending Reload filters in Plugins page. - Ability to browse external plugins in repositories. Official repository will be added soon. Fixes/Refactor: - Refactored Plugin-related settings to a separate "Plugin Settings" plugin. - Masonry layout fixes in landscape. - Updated plugins now show "reload to apply" toast instead. - Removed dead code.
2026-07-25 23:35:23 +07:00
import { useState } from 'react'
import { PixelRatio, useWindowDimensions, View } from 'react-native'
import { PLUGIN_CARD_ESTIMATED_SIZE } from './PluginCard'
import { PluginFlashList } from './PluginList'
import type { AnyPlugin } from '@revenge-mod/plugins/_'
const { AlertModal, AlertActionButton, Text } = Design
export default function PluginHasDependentsAlert({
plugin,
dependents,
action,
}: {
plugin: AnyPlugin
dependents: AnyPlugin[]
action: () => Promise<void>
}) {
const { height: windowHeight } = useWindowDimensions()
const maxHeight = PixelRatio.get() * windowHeight * 0.35 - 64
feat!: new repo system + versioning system support + bug fixes BREAKING CHANGES: - New versioning system: Allowing any amount of number segments, with prerelease support. - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ... - Prerelease labels are compared "digit-run", similar to Debian. - Plugins must specify a version. - User-facing plugins should use CalVer. API plugins should use SemVer. Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly. - Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system) - Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version). - Manifest now requires a format version (currently `1`) New APIs: - lib/plugins/utils: Utilities to format versioning Features: - New repo system: Repository design is inspired by Linux package repositories. - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins. - New dependency system: Plugins are versioned, and shouldn't break when updates come. Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates. Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required. Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again. - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side. - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification. - Local indexes are updated against remote indexes. Dependency checking always uses local indexes. - Users can add custom repositories and custom their priority order. URL is the identity. - Plugins can now have custom data URI icons instead of being restricted to React Native app assets. - External plugin installs require UI confirmation before installing. - Pending Update and Pending Reload filters in Plugins page. - Ability to browse external plugins in repositories. Official repository will be added soon. Fixes/Refactor: - Refactored Plugin-related settings to a separate "Plugin Settings" plugin. - Masonry layout fixes in landscape. - Updated plugins now show "reload to apply" toast instead. - Removed dead code.
2026-07-25 23:35:23 +07:00
const [height, setHeight] = useState(
PLUGIN_CARD_ESTIMATED_SIZE * dependents.length,
)
return (
<AlertModal
title="Plugin has dependents"
content={
2025-12-13 22:41:08 +07:00
<Text color="text-default">
Other plugins depend on{' '}
2025-12-13 22:41:08 +07:00
<Text variant="text-md/semibold" color="text-default">
{plugin.manifest.name}
</Text>{' '}
to function.
{'\n'}
Disabling it will also disable the following plugins:
</Text>
}
extraContent={
<View
style={{
feat!: new repo system + versioning system support + bug fixes BREAKING CHANGES: - New versioning system: Allowing any amount of number segments, with prerelease support. - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ... - Prerelease labels are compared "digit-run", similar to Debian. - Plugins must specify a version. - User-facing plugins should use CalVer. API plugins should use SemVer. Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly. - Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system) - Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version). - Manifest now requires a format version (currently `1`) New APIs: - lib/plugins/utils: Utilities to format versioning Features: - New repo system: Repository design is inspired by Linux package repositories. - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins. - New dependency system: Plugins are versioned, and shouldn't break when updates come. Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates. Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required. Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again. - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side. - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification. - Local indexes are updated against remote indexes. Dependency checking always uses local indexes. - Users can add custom repositories and custom their priority order. URL is the identity. - Plugins can now have custom data URI icons instead of being restricted to React Native app assets. - External plugin installs require UI confirmation before installing. - Pending Update and Pending Reload filters in Plugins page. - Ability to browse external plugins in repositories. Official repository will be added soon. Fixes/Refactor: - Refactored Plugin-related settings to a separate "Plugin Settings" plugin. - Masonry layout fixes in landscape. - Updated plugins now show "reload to apply" toast instead. - Removed dead code.
2026-07-25 23:35:23 +07:00
height,
maxHeight,
}}
>
feat!: new repo system + versioning system support + bug fixes BREAKING CHANGES: - New versioning system: Allowing any amount of number segments, with prerelease support. - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ... - Prerelease labels are compared "digit-run", similar to Debian. - Plugins must specify a version. - User-facing plugins should use CalVer. API plugins should use SemVer. Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly. - Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system) - Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version). - Manifest now requires a format version (currently `1`) New APIs: - lib/plugins/utils: Utilities to format versioning Features: - New repo system: Repository design is inspired by Linux package repositories. - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins. - New dependency system: Plugins are versioned, and shouldn't break when updates come. Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates. Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required. Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again. - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side. - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification. - Local indexes are updated against remote indexes. Dependency checking always uses local indexes. - Users can add custom repositories and custom their priority order. URL is the identity. - Plugins can now have custom data URI icons instead of being restricted to React Native app assets. - External plugin installs require UI confirmation before installing. - Pending Update and Pending Reload filters in Plugins page. - Ability to browse external plugins in repositories. Official repository will be added soon. Fixes/Refactor: - Refactored Plugin-related settings to a separate "Plugin Settings" plugin. - Masonry layout fixes in landscape. - Updated plugins now show "reload to apply" toast instead. - Removed dead code.
2026-07-25 23:35:23 +07:00
<PluginFlashList
plugins={dependents}
onContentSizeChange={(_, h) => setHeight(h)}
/>
</View>
}
actions={
<>
<AlertActionButton
text="Disable all"
variant="destructive"
onPress={action}
/>
<AlertActionButton text="Cancel" variant="secondary" />
</>
}
/>
)
}