1// use crate::feedback_editor::{FeedbackEditor, SubmitFeedback};
2// use anyhow::Result;
3// use gpui::{
4// elements::{Label, MouseEventHandler},
5// platform::{CursorStyle, MouseButton},
6// AnyElement, AppContext, Element, Entity, Task, View, ViewContext, ViewHandle,
7// };
8// use workspace::{item::ItemHandle, ToolbarItemLocation, ToolbarItemView};
9
10// pub fn init(cx: &mut AppContext) {
11// cx.add_async_action(SubmitFeedbackButton::submit);
12// }
13
14// pub struct SubmitFeedbackButton {
15// pub(crate) active_item: Option<ViewHandle<FeedbackEditor>>,
16// }
17
18// impl SubmitFeedbackButton {
19// pub fn new() -> Self {
20// Self {
21// active_item: Default::default(),
22// }
23// }
24
25// pub fn submit(
26// &mut self,
27// _: &SubmitFeedback,
28// cx: &mut ViewContext<Self>,
29// ) -> Option<Task<Result<()>>> {
30// if let Some(active_item) = self.active_item.as_ref() {
31// Some(active_item.update(cx, |feedback_editor, cx| feedback_editor.submit(cx)))
32// } else {
33// None
34// }
35// }
36// }
37
38// impl Entity for SubmitFeedbackButton {
39// type Event = ();
40// }
41
42// impl View for SubmitFeedbackButton {
43// fn ui_name() -> &'static str {
44// "SubmitFeedbackButton"
45// }
46
47// fn render(&mut self, cx: &mut ViewContext<Self>) -> AnyElement<Self> {
48// let theme = theme::current(cx).clone();
49// let allow_submission = self
50// .active_item
51// .as_ref()
52// .map_or(true, |i| i.read(cx).allow_submission);
53
54// enum SubmitFeedbackButton {}
55// MouseEventHandler::new::<SubmitFeedbackButton, _>(0, cx, |state, _| {
56// let text;
57// let style = if allow_submission {
58// text = "Submit as Markdown";
59// theme.feedback.submit_button.style_for(state)
60// } else {
61// text = "Submitting...";
62// theme
63// .feedback
64// .submit_button
65// .disabled
66// .as_ref()
67// .unwrap_or(&theme.feedback.submit_button.default)
68// };
69
70// Label::new(text, style.text.clone())
71// .contained()
72// .with_style(style.container)
73// })
74// .with_cursor_style(CursorStyle::PointingHand)
75// .on_click(MouseButton::Left, |_, this, cx| {
76// this.submit(&Default::default(), cx);
77// })
78// .aligned()
79// .contained()
80// .with_margin_left(theme.feedback.button_margin)
81// .with_tooltip::<Self>(
82// 0,
83// "cmd-s",
84// Some(Box::new(SubmitFeedback)),
85// theme.tooltip.clone(),
86// cx,
87// )
88// .into_any()
89// }
90// }
91
92// impl ToolbarItemView for SubmitFeedbackButton {
93// fn set_active_pane_item(
94// &mut self,
95// active_pane_item: Option<&dyn ItemHandle>,
96// cx: &mut ViewContext<Self>,
97// ) -> workspace::ToolbarItemLocation {
98// cx.notify();
99// if let Some(feedback_editor) = active_pane_item.and_then(|i| i.downcast::<FeedbackEditor>())
100// {
101// self.active_item = Some(feedback_editor);
102// ToolbarItemLocation::PrimaryRight { flex: None }
103// } else {
104// self.active_item = None;
105// ToolbarItemLocation::Hidden
106// }
107// }
108// }