ai onboarding: Add dismiss button to the sign in banner (#40660)

Danilo Leal created

Release Notes:

- N/A

Change summary

crates/ai_onboarding/src/ai_onboarding.rs | 87 +++++++-----------------
1 file changed, 26 insertions(+), 61 deletions(-)

Detailed changes

crates/ai_onboarding/src/ai_onboarding.rs 🔗

@@ -84,10 +84,32 @@ impl ZedAiOnboarding {
         self
     }
 
+    fn render_dismiss_button(&self) -> Option<AnyElement> {
+        self.dismiss_onboarding.as_ref().map(|dismiss_callback| {
+            let callback = dismiss_callback.clone();
+
+            h_flex()
+                .absolute()
+                .top_0()
+                .right_0()
+                .child(
+                    IconButton::new("dismiss_onboarding", IconName::Close)
+                        .icon_size(IconSize::Small)
+                        .tooltip(Tooltip::text("Dismiss"))
+                        .on_click(move |_, window, cx| {
+                            telemetry::event!("Banner Dismissed", source = "AI Onboarding",);
+                            callback(window, cx)
+                        }),
+                )
+                .into_any_element()
+        })
+    }
+
     fn render_sign_in_disclaimer(&self, _cx: &mut App) -> AnyElement {
         let signing_in = matches!(self.sign_in_status, SignInStatus::SigningIn);
 
         v_flex()
+            .relative()
             .gap_1()
             .child(Headline::new("Welcome to Zed AI"))
             .child(
@@ -109,6 +131,7 @@ impl ZedAiOnboarding {
                         }
                     }),
             )
+            .children(self.render_dismiss_button())
             .into_any_element()
     }
 
@@ -180,27 +203,7 @@ impl ZedAiOnboarding {
                         )
                         .child(PlanDefinitions.free_plan(is_v2)),
                 )
-                .when_some(
-                    self.dismiss_onboarding.as_ref(),
-                    |this, dismiss_callback| {
-                        let callback = dismiss_callback.clone();
-
-                        this.child(
-                            h_flex().absolute().top_0().right_0().child(
-                                IconButton::new("dismiss_onboarding", IconName::Close)
-                                    .icon_size(IconSize::Small)
-                                    .tooltip(Tooltip::text("Dismiss"))
-                                    .on_click(move |_, window, cx| {
-                                        telemetry::event!(
-                                            "Banner Dismissed",
-                                            source = "AI Onboarding",
-                                        );
-                                        callback(window, cx)
-                                    }),
-                            ),
-                        )
-                    },
-                )
+                .children(self.render_dismiss_button())
                 .child(
                     v_flex()
                         .mt_2()
@@ -245,26 +248,7 @@ impl ZedAiOnboarding {
                     .mb_2(),
             )
             .child(PlanDefinitions.pro_trial(is_v2, false))
-            .when_some(
-                self.dismiss_onboarding.as_ref(),
-                |this, dismiss_callback| {
-                    let callback = dismiss_callback.clone();
-                    this.child(
-                        h_flex().absolute().top_0().right_0().child(
-                            IconButton::new("dismiss_onboarding", IconName::Close)
-                                .icon_size(IconSize::Small)
-                                .tooltip(Tooltip::text("Dismiss"))
-                                .on_click(move |_, window, cx| {
-                                    telemetry::event!(
-                                        "Banner Dismissed",
-                                        source = "AI Onboarding",
-                                    );
-                                    callback(window, cx)
-                                }),
-                        ),
-                    )
-                },
-            )
+            .children(self.render_dismiss_button())
             .into_any_element()
     }
 
@@ -278,26 +262,7 @@ impl ZedAiOnboarding {
                     .mb_2(),
             )
             .child(PlanDefinitions.pro_plan(is_v2, false))
-            .when_some(
-                self.dismiss_onboarding.as_ref(),
-                |this, dismiss_callback| {
-                    let callback = dismiss_callback.clone();
-                    this.child(
-                        h_flex().absolute().top_0().right_0().child(
-                            IconButton::new("dismiss_onboarding", IconName::Close)
-                                .icon_size(IconSize::Small)
-                                .tooltip(Tooltip::text("Dismiss"))
-                                .on_click(move |_, window, cx| {
-                                    telemetry::event!(
-                                        "Banner Dismissed",
-                                        source = "AI Onboarding",
-                                    );
-                                    callback(window, cx)
-                                }),
-                        ),
-                    )
-                },
-            )
+            .children(self.render_dismiss_button())
             .into_any_element()
     }
 }