diff --git a/crates/edit_prediction_ui/src/edit_prediction_button.rs b/crates/edit_prediction_ui/src/edit_prediction_button.rs index bf915409480f1ab56ef7b2c002c467c02c1095d3..3adc61fca39be9381ef559b3bcbdacfbe52138bb 100644 --- a/crates/edit_prediction_ui/src/edit_prediction_button.rs +++ b/crates/edit_prediction_ui/src/edit_prediction_button.rs @@ -573,6 +573,14 @@ impl EditPredictionButton { current_provider: EditPredictionProvider, cx: &mut App, ) -> ContextMenu { + let organization_configuration = self + .user_store + .read(cx) + .current_organization_configuration(); + + let is_zed_provider_disabled = organization_configuration + .is_some_and(|configuration| !configuration.edit_prediction.is_enabled); + let available_providers = get_available_providers(cx); let providers: Vec<_> = available_providers @@ -592,7 +600,26 @@ impl EditPredictionButton { menu = menu.item( ContextMenuEntry::new(name) - .toggleable(IconPosition::Start, is_current) + .toggleable( + IconPosition::Start, + is_current + && (provider == EditPredictionProvider::Zed + && !is_zed_provider_disabled), + ) + .disabled( + provider == EditPredictionProvider::Zed && is_zed_provider_disabled, + ) + .when( + provider == EditPredictionProvider::Zed && is_zed_provider_disabled, + |item| { + item.documentation_aside(DocumentationSide::Left, move |_cx| { + Label::new( + "Edit predictions are disabled for this organization.", + ) + .into_any_element() + }) + }, + ) .handler(move |_, cx| { set_completion_provider(fs.clone(), cx, provider); }), diff --git a/crates/zed/src/zed/edit_prediction_registry.rs b/crates/zed/src/zed/edit_prediction_registry.rs index d09dc07af839a681cea96d43217c4217927864d5..e12456155427534565f226730850c7790739369f 100644 --- a/crates/zed/src/zed/edit_prediction_registry.rs +++ b/crates/zed/src/zed/edit_prediction_registry.rs @@ -62,8 +62,9 @@ pub fn init(client: Arc, user_store: Entity, cx: &mut App) { let editors = editors.clone(); let client = client.clone(); - move |user_store, event, cx| { - if let client::user::Event::PrivateUserInfoUpdated = event { + move |user_store, event, cx| match event { + client::user::Event::PrivateUserInfoUpdated + | client::user::Event::OrganizationChanged => { let provider_config = edit_prediction_provider_config_for_settings(cx); assign_edit_prediction_providers( &editors, @@ -73,6 +74,7 @@ pub fn init(client: Arc, user_store: Entity, cx: &mut App) { cx, ); } + _ => {} } }) .detach(); @@ -275,6 +277,18 @@ fn assign_edit_prediction_provider( Some(EditPredictionProviderConfig::Zed(model)) => { let ep_store = edit_prediction::EditPredictionStore::global(client, &user_store, cx); + if let Some(organization_configuration) = + user_store.read(cx).current_organization_configuration() + { + if !organization_configuration.edit_prediction.is_enabled { + editor.set_edit_prediction_provider::( + None, window, cx, + ); + + return; + } + } + if let Some(project) = editor.project() { ep_store.update(cx, |ep_store, cx| { ep_store.set_edit_prediction_model(model);