
After our last community sync, we came to the conclusion that feedback being sent outside of email is difficult to reply to. Our decision was to use the old, tried and true email system, so that we can better respond to people asking questions. <img width="392" alt="SCR-20250320-igub" src="https://github.com/user-attachments/assets/f1d01771-30eb-4b6f-b031-c68ddaac5700" /> Release Notes: - N/A --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
113 lines
4.2 KiB
Rust
113 lines
4.2 KiB
Rust
use gpui::{App, Context, DismissEvent, EventEmitter, FocusHandle, Focusable, Render, Window};
|
|
use ui::{prelude::*, IconPosition};
|
|
use workspace::{ModalView, Workspace};
|
|
use zed_actions::feedback::GiveFeedback;
|
|
|
|
use crate::{EmailZed, FileBugReport, OpenZedRepo, RequestFeature};
|
|
|
|
pub struct FeedbackModal {
|
|
focus_handle: FocusHandle,
|
|
}
|
|
|
|
impl Focusable for FeedbackModal {
|
|
fn focus_handle(&self, _: &App) -> FocusHandle {
|
|
self.focus_handle.clone()
|
|
}
|
|
}
|
|
impl EventEmitter<DismissEvent> for FeedbackModal {}
|
|
|
|
impl ModalView for FeedbackModal {}
|
|
|
|
impl FeedbackModal {
|
|
pub fn register(workspace: &mut Workspace, _: &mut Window, cx: &mut Context<Workspace>) {
|
|
let _handle = cx.entity().downgrade();
|
|
workspace.register_action(move |workspace, _: &GiveFeedback, window, cx| {
|
|
workspace.toggle_modal(window, cx, move |_, cx| FeedbackModal::new(cx));
|
|
});
|
|
}
|
|
|
|
pub fn new(cx: &mut Context<Self>) -> Self {
|
|
Self {
|
|
focus_handle: cx.focus_handle(),
|
|
}
|
|
}
|
|
|
|
fn cancel(&mut self, _: &menu::Cancel, _: &mut Window, cx: &mut Context<Self>) {
|
|
cx.emit(DismissEvent)
|
|
}
|
|
}
|
|
|
|
impl Render for FeedbackModal {
|
|
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
|
|
let open_zed_repo =
|
|
cx.listener(|_, _, window, cx| window.dispatch_action(Box::new(OpenZedRepo), cx));
|
|
|
|
v_flex()
|
|
.key_context("GiveFeedback")
|
|
.on_action(cx.listener(Self::cancel))
|
|
.elevation_3(cx)
|
|
.w_96()
|
|
.h_auto()
|
|
.p_4()
|
|
.gap_2()
|
|
.child(
|
|
h_flex()
|
|
.w_full()
|
|
.justify_between()
|
|
.child(Headline::new("Give Feedback"))
|
|
.child(
|
|
IconButton::new("close-btn", IconName::Close)
|
|
.icon_color(Color::Muted)
|
|
.on_click(cx.listener(move |_, _, window, cx| {
|
|
cx.spawn_in(window, async move |this, cx| {
|
|
this.update(cx, |_, cx| cx.emit(DismissEvent)).ok();
|
|
})
|
|
.detach();
|
|
})),
|
|
),
|
|
)
|
|
.child(Label::new("Thanks for using Zed! To share your experience with us, reach for the channel that's the most appropriate:"))
|
|
.child(
|
|
Button::new("file-a-bug-report", "File a Bug Report")
|
|
.full_width()
|
|
.icon(IconName::Debug)
|
|
.icon_size(IconSize::XSmall)
|
|
.icon_color(Color::Muted)
|
|
.icon_position(IconPosition::Start)
|
|
.on_click(cx.listener(|_, _, window, cx| {
|
|
window.dispatch_action(Box::new(FileBugReport), cx);
|
|
})),
|
|
)
|
|
.child(
|
|
Button::new("request-a-feature", "Request a Feature")
|
|
.full_width()
|
|
.icon(IconName::Sparkle)
|
|
.icon_size(IconSize::XSmall)
|
|
.icon_color(Color::Muted)
|
|
.icon_position(IconPosition::Start)
|
|
.on_click(cx.listener(|_, _, window, cx| {
|
|
window.dispatch_action(Box::new(RequestFeature), cx);
|
|
})),
|
|
)
|
|
.child(
|
|
Button::new("send-us_an-email", "Send an Email")
|
|
.full_width()
|
|
.icon(IconName::Envelope)
|
|
.icon_size(IconSize::XSmall)
|
|
.icon_color(Color::Muted)
|
|
.icon_position(IconPosition::Start)
|
|
.on_click(cx.listener(|_, _, window, cx| {
|
|
window.dispatch_action(Box::new(EmailZed), cx);
|
|
})),
|
|
)
|
|
.child(
|
|
Button::new("zed_repository", "GitHub Repository")
|
|
.full_width()
|
|
.icon(IconName::Github)
|
|
.icon_size(IconSize::XSmall)
|
|
.icon_color(Color::Muted)
|
|
.icon_position(IconPosition::Start)
|
|
.on_click(open_zed_repo),
|
|
)
|
|
}
|
|
}
|