diff --git a/crates/crabapi/src/gui/iced/mod.rs b/crates/crabapi/src/gui/iced/mod.rs index d27fd0f..8e9ae5b 100644 --- a/crates/crabapi/src/gui/iced/mod.rs +++ b/crates/crabapi/src/gui/iced/mod.rs @@ -7,7 +7,7 @@ use crate::core::requests; use iced; use iced::widget::text_editor::{Action, Content}; use iced::widget::{Button, Row, Text, TextInput, scrollable, text_editor}; -use iced::widget::{button, column, container, pick_list, row}; +use iced::widget::{column, container, pick_list, row}; use iced::{Alignment, Center, Element, Length, Task}; use iced_highlighter::Highlighter; use reqwest::{Body, Client}; @@ -50,6 +50,8 @@ struct GUI { response_body: Content, } +mod views; + impl GUI { fn new() -> Self { Self { @@ -253,121 +255,6 @@ impl GUI { .into() } - // VIEW REQUEST - HEADERS - - fn view_request_headers(&self) -> Element { - let headers_title = Self::view_request_headers_title(); - - let headers_column = self.view_request_headers_column(); - - let header_add_button = Self::view_request_headers_add_button(); - - column![headers_title, headers_column, header_add_button] - .spacing(default_styles::spacing()) - .into() - } - - fn view_request_headers_title() -> Element<'static, Message> { - Text::new("Headers").size(16).into() - } - - fn view_request_headers_column(&self) -> Element { - let mut headers_column = column![]; - - for (i, header) in self.header_input.iter().enumerate() { - let header_row = self.view_request_headers_column_row(i, header); - headers_column = headers_column.push(header_row); - } - headers_column.spacing(default_styles::spacing()).into() - } - - fn view_request_headers_column_row( - &self, - index: usize, - header: &(String, String), - ) -> Element { - row![ - TextInput::new("Key", &header.0) - .on_input( - move |key| Message::HeaderInputChanged(TupleEvent::KeyChanged(index, key)) - ) - .width(Length::FillPortion(1)), - TextInput::new("Value", &header.1) // TODO: Change unwrap - .on_input( - move |value| Message::HeaderInputChanged(TupleEvent::ValueChanged( - index, value - )) - ) - .width(Length::FillPortion(2)), - Button::new(Text::new("X")) - .on_press(Message::HeaderInputChanged(TupleEvent::Remove(index))) - .style(button::danger), - ] - .spacing(default_styles::spacing()) - .into() - } - - fn view_request_headers_add_button() -> Element<'static, Message> { - Button::new(Text::new("Add Header").size(default_styles::input_size())) - .on_press(Message::HeaderInputChanged(TupleEvent::Add)) - .into() - } - - // VIEW REQUEST QUERIES - fn view_request_queries(&self) -> Element { - let queries_title = Self::view_request_queries_title(); - - let queries_column = self.view_request_queries_column(); - - let query_add_button = Self::view_request_queries_add_button(); - - column![queries_title, queries_column, query_add_button] - .spacing(default_styles::spacing()) - .into() - } - - fn view_request_queries_title() -> Element<'static, Message> { - Text::new("Queries").size(16).into() - } - - fn view_request_queries_column(&self) -> Element { - let mut queries_column = column![]; - - for (i, query) in self.query_input.iter().enumerate() { - let header_row = self.view_request_queries_row(i, query); - queries_column = queries_column.push(header_row); - } - queries_column.spacing(default_styles::spacing()).into() - } - - fn view_request_queries_row( - &self, - index: usize, - header: &(String, String), - ) -> Element { - row![ - TextInput::new("Key", &header.0) - .on_input(move |key| Message::QueryInputChanged(TupleEvent::KeyChanged(index, key))) - .width(Length::FillPortion(1)), - TextInput::new("Value", &header.1) // TODO: Change unwrap - .on_input( - move |value| Message::QueryInputChanged(TupleEvent::ValueChanged(index, value)) - ) - .width(Length::FillPortion(2)), - Button::new(Text::new("X")) - .on_press(Message::QueryInputChanged(TupleEvent::Remove(index))) - .style(button::danger), - ] - .spacing(default_styles::spacing()) - .into() - } - - fn view_request_queries_add_button() -> Element<'static, Message> { - Button::new(Text::new("Add Query").size(default_styles::input_size())) - .on_press(Message::QueryInputChanged(TupleEvent::Add)) - .into() - } - fn view_response(&self) -> Element<'_, Message> { let label = Text::new("Response:").size(default_styles::input_size()); let body = text_editor(&self.response_body) diff --git a/crates/crabapi/src/gui/iced/views/headers.rs b/crates/crabapi/src/gui/iced/views/headers.rs new file mode 100644 index 0000000..0189dcf --- /dev/null +++ b/crates/crabapi/src/gui/iced/views/headers.rs @@ -0,0 +1,64 @@ +use super::GUI; +use crate::gui::iced::{Message, TupleEvent, default_styles}; +use iced::widget::{Button, Text, TextInput, row}; +use iced::{Element, Length}; + +impl GUI { + pub fn view_request_headers(&self) -> Element { + let headers_title = Self::view_request_headers_title(); + + let headers_column = self.view_request_headers_column(); + + let header_add_button = Self::view_request_headers_add_button(); + + iced::widget::column![headers_title, headers_column, header_add_button] + .spacing(default_styles::spacing()) + .into() + } + + fn view_request_headers_title() -> Element<'static, Message> { + Text::new("Headers").size(16).into() + } + + fn view_request_headers_column(&self) -> Element { + let mut headers_column = iced::widget::column![]; + + for (i, header) in self.header_input.iter().enumerate() { + let header_row = self.view_request_headers_column_row(i, header); + headers_column = headers_column.push(header_row); + } + headers_column.spacing(default_styles::spacing()).into() + } + + fn view_request_headers_column_row( + &self, + index: usize, + header: &(String, String), + ) -> Element { + row![ + TextInput::new("Key", &header.0) + .on_input( + move |key| Message::HeaderInputChanged(TupleEvent::KeyChanged(index, key)) + ) + .width(Length::FillPortion(1)), + TextInput::new("Value", &header.1) + .on_input( + move |value| Message::HeaderInputChanged(TupleEvent::ValueChanged( + index, value + )) + ) + .width(Length::FillPortion(2)), + Button::new(Text::new("X")) + .on_press(Message::HeaderInputChanged(TupleEvent::Remove(index))) + .style(iced::widget::button::danger), + ] + .spacing(default_styles::spacing()) + .into() + } + + fn view_request_headers_add_button() -> Element<'static, Message> { + Button::new(Text::new("Add Header").size(default_styles::input_size())) + .on_press(Message::HeaderInputChanged(TupleEvent::Add)) + .into() + } +} diff --git a/crates/crabapi/src/gui/iced/views/mod.rs b/crates/crabapi/src/gui/iced/views/mod.rs new file mode 100644 index 0000000..78d9fd1 --- /dev/null +++ b/crates/crabapi/src/gui/iced/views/mod.rs @@ -0,0 +1,3 @@ +use super::GUI; +mod headers; +mod queries; diff --git a/crates/crabapi/src/gui/iced/views/queries.rs b/crates/crabapi/src/gui/iced/views/queries.rs new file mode 100644 index 0000000..b0d2af0 --- /dev/null +++ b/crates/crabapi/src/gui/iced/views/queries.rs @@ -0,0 +1,60 @@ +use super::GUI; +use crate::gui::iced::{Message, TupleEvent, default_styles}; +use iced::widget::{Button, Text, TextInput, row}; +use iced::{Element, Length}; + +impl GUI { + pub fn view_request_queries(&self) -> Element { + let queries_title = Self::view_request_queries_title(); + + let queries_column = self.view_request_queries_column(); + + let query_add_button = Self::view_request_queries_add_button(); + + iced::widget::column![queries_title, queries_column, query_add_button] + .spacing(default_styles::spacing()) + .into() + } + + fn view_request_queries_title() -> Element<'static, Message> { + Text::new("Queries").size(16).into() + } + + fn view_request_queries_column(&self) -> Element { + let mut queries_column = iced::widget::column![]; + + for (i, query) in self.query_input.iter().enumerate() { + let header_row = self.view_request_queries_row(i, query); + queries_column = queries_column.push(header_row); + } + queries_column.spacing(default_styles::spacing()).into() + } + + fn view_request_queries_row( + &self, + index: usize, + header: &(String, String), + ) -> Element { + row![ + TextInput::new("Key", &header.0) + .on_input(move |key| Message::QueryInputChanged(TupleEvent::KeyChanged(index, key))) + .width(Length::FillPortion(1)), + TextInput::new("Value", &header.1) + .on_input( + move |value| Message::QueryInputChanged(TupleEvent::ValueChanged(index, value)) + ) + .width(Length::FillPortion(2)), + Button::new(Text::new("X")) + .on_press(Message::QueryInputChanged(TupleEvent::Remove(index))) + .style(iced::widget::button::danger), + ] + .spacing(default_styles::spacing()) + .into() + } + + fn view_request_queries_add_button() -> Element<'static, Message> { + Button::new(Text::new("Add Query").size(default_styles::input_size())) + .on_press(Message::QueryInputChanged(TupleEvent::Add)) + .into() + } +}