show notification if no recent projects

Kay Simmons created

Change summary

crates/recent_projects/src/recent_projects.rs | 27 ++++++++++++++------
crates/workspace/src/notifications.rs         |  4 +-
2 files changed, 21 insertions(+), 10 deletions(-)

Detailed changes

crates/recent_projects/src/recent_projects.rs 🔗

@@ -11,7 +11,10 @@ use highlighted_workspace_location::HighlightedWorkspaceLocation;
 use ordered_float::OrderedFloat;
 use picker::{Picker, PickerDelegate};
 use settings::Settings;
-use workspace::{OpenPaths, Workspace, WorkspaceLocation, WORKSPACE_DB};
+use workspace::{
+    notifications::simple_message_notification::MessageNotification, OpenPaths, Workspace,
+    WorkspaceLocation, WORKSPACE_DB,
+};
 
 actions!(projects, [OpenRecent]);
 
@@ -42,7 +45,7 @@ impl RecentProjectsView {
 
     fn toggle(_: &mut Workspace, _: &OpenRecent, cx: &mut ViewContext<Workspace>) {
         cx.spawn(|workspace, mut cx| async move {
-            let workspace_locations = cx
+            let workspace_locations: Vec<_> = cx
                 .background()
                 .spawn(async {
                     WORKSPACE_DB
@@ -56,12 +59,20 @@ impl RecentProjectsView {
                 .await;
 
             workspace.update(&mut cx, |workspace, cx| {
-                workspace.toggle_modal(cx, |_, cx| {
-                    let view = cx.add_view(|cx| Self::new(workspace_locations, cx));
-                    cx.subscribe(&view, Self::on_event).detach();
-                    view
-                });
-            })
+                if !workspace_locations.is_empty() {
+                    workspace.toggle_modal(cx, |_, cx| {
+                        let view = cx.add_view(|cx| Self::new(workspace_locations, cx));
+                        cx.subscribe(&view, Self::on_event).detach();
+                        view
+                    });
+                } else {
+                    workspace.show_notification(0, cx, |cx| {
+                        cx.add_view(|_| {
+                            MessageNotification::new_message("No recent projects to open.")
+                        })
+                    })
+                }
+            });
         })
         .detach();
     }

crates/workspace/src/notifications.rs 🔗

@@ -174,7 +174,7 @@ pub mod simple_message_notification {
     }
 
     impl MessageNotification {
-        pub fn new_messsage<S: AsRef<str>>(message: S) -> MessageNotification {
+        pub fn new_message<S: AsRef<str>>(message: S) -> MessageNotification {
             Self {
                 message: message.as_ref().to_string(),
                 click_action: None,
@@ -320,7 +320,7 @@ where
             Err(err) => {
                 workspace.show_notification(0, cx, |cx| {
                     cx.add_view(|_cx| {
-                        simple_message_notification::MessageNotification::new_messsage(format!(
+                        simple_message_notification::MessageNotification::new_message(format!(
                             "Error: {:?}",
                             err,
                         ))