Store email address on modal close

Joseph T. Lyons created

Change summary

crates/feedback2/src/feedback_modal.rs | 40 ++++++++++++++++-----------
1 file changed, 24 insertions(+), 16 deletions(-)

Detailed changes

crates/feedback2/src/feedback_modal.rs 🔗

@@ -87,6 +87,8 @@ impl EventEmitter<DismissEvent> for FeedbackModal {}
 
 impl ModalView for FeedbackModal {
     fn on_before_dismiss(&mut self, cx: &mut ViewContext<Self>) -> bool {
+        self.update_email_in_store(cx);
+
         if self.dismiss_modal {
             return true;
         }
@@ -214,21 +216,6 @@ impl FeedbackModal {
         cx.spawn(|this, mut cx| async move {
             let answer = answer.await.ok();
             if answer == Some(0) {
-                match email.clone() {
-                    Some(email) => {
-                        KEY_VALUE_STORE
-                            .write_kvp(DATABASE_KEY_NAME.to_string(), email)
-                            .await
-                            .ok();
-                    }
-                    None => {
-                        KEY_VALUE_STORE
-                            .delete_kvp(DATABASE_KEY_NAME.to_string())
-                            .await
-                            .ok();
-                    }
-                };
-
                 this.update(&mut cx, |this, cx| {
                     this.submission_state = Some(SubmissionState::CannotSubmit {
                         reason: CannotSubmitReason::AwaitingSubmission,
@@ -351,6 +338,28 @@ impl FeedbackModal {
         }
     }
 
+    fn update_email_in_store(&self, cx: &mut ViewContext<Self>) {
+        let email = self.email_address_editor.read(cx).text_option(cx);
+
+        cx.spawn(|_, _| async move {
+            match email {
+                Some(email) => {
+                    KEY_VALUE_STORE
+                        .write_kvp(DATABASE_KEY_NAME.to_string(), email)
+                        .await
+                        .ok();
+                }
+                None => {
+                    KEY_VALUE_STORE
+                        .delete_kvp(DATABASE_KEY_NAME.to_string())
+                        .await
+                        .ok();
+                }
+            }
+        })
+        .detach();
+    }
+
     fn valid_email_address(&self) -> bool {
         !self.in_invalid_state(InvalidStateFlags::EmailAddress)
     }
@@ -508,7 +517,6 @@ impl Render for FeedbackModal {
     }
 }
 
-// TODO: Maybe store email address whenever the modal is closed, versus just on submit, so users can remove it if they want without submitting
 // TODO: Testing of various button states, dismissal prompts, etc.
 
 // #[cfg(test)]