diff --git a/src-tauri/src/drivers/driver_trait.rs b/src-tauri/src/drivers/driver_trait.rs index 4eccf61a..0d72662b 100644 --- a/src-tauri/src/drivers/driver_trait.rs +++ b/src-tauri/src/drivers/driver_trait.rs @@ -149,6 +149,10 @@ pub struct UIExtensionEntry { /// Ordering weight (lower = earlier). #[serde(skip_serializing_if = "Option::is_none")] pub order: Option, + /// If set, the contribution is only rendered when the active driver + /// matches this identifier (e.g. `"wordpress"`). + #[serde(skip_serializing_if = "Option::is_none")] + pub driver: Option, } /// A single user-configurable setting declared in a plugin's manifest. diff --git a/src-tauri/src/plugins/tests.rs b/src-tauri/src/plugins/tests.rs index d04ab2d9..e4054db8 100644 --- a/src-tauri/src/plugins/tests.rs +++ b/src-tauri/src/plugins/tests.rs @@ -3,6 +3,7 @@ use std::fs; use tempfile::tempdir; use super::installer::read_plugin_info_from_dir; +use super::manager::ConfigManifest; #[test] fn reads_installed_plugin_info_from_manifest() { @@ -27,6 +28,36 @@ fn reads_installed_plugin_info_from_manifest() { assert_eq!(plugin.description, "Query Sheets"); } +#[test] +fn preserves_ui_extension_driver_filter_from_manifest() { + let manifest: ConfigManifest = serde_json::from_str( + r#"{ + "id": "wordpress", + "name": "WordPress", + "version": "1.0.0", + "description": "WordPress driver", + "ui_extensions": [ + { + "slot": "connection-modal.connection_content", + "module": "ui/dist/index.js", + "driver": "wordpress" + }, + { + "slot": "data-grid.toolbar.actions", + "module": "ui/dist/index.js", + "order": 10 + } + ] +}"#, + ) + .expect("parse manifest"); + + let entries = manifest.ui_extensions.expect("ui_extensions present"); + assert_eq!(entries[0].driver.as_deref(), Some("wordpress")); + assert_eq!(entries[1].driver, None); + assert_eq!(entries[1].order, Some(10)); +} + #[test] fn returns_error_for_invalid_manifest() { let dir = tempdir().expect("temp dir");