Skip to content

Commit

Permalink
Extracted render_selected_message function.
Browse files Browse the repository at this point in the history
  • Loading branch information
dmackdev committed Oct 17, 2023
1 parent 633d3f7 commit c4f2b4d
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 98 deletions.
111 changes: 13 additions & 98 deletions pubsubman/src/app.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
use std::collections::{HashMap, HashSet};

use chrono::{DateTime, Local};
use egui_json_tree::{DefaultExpand, JsonTree};
use pubsubman_backend::{
message::{BackendMessage, FrontendMessage},
model::{PubsubMessage, PubsubMessageToPublish, SubscriptionName, TopicName},
model::{PubsubMessage, SubscriptionName, TopicName},
Backend,
};
use tokio::sync::mpsc::{Receiver, Sender};

use crate::{
actions::{create_subscription, delete_subscriptions, publish_message, refresh_topics},
actions::{create_subscription, delete_subscriptions, refresh_topics},
column_settings::ColumnSettings,
exit_state::{ExitState, SubscriptionCleanupState},
notifications::Notifications,
settings::Settings,
ui::{render_topic_name, show_json_context_menu, MessagesView, PublishView},
ui::{render_selected_message, render_topic_name, MessagesView, PublishView},
};

#[derive(Default, serde::Deserialize, serde::Serialize)]
Expand Down Expand Up @@ -210,99 +208,16 @@ impl App {
.resizable(true)
.show_animated(ctx, selected_message.is_some(), |ui| {
if let Some(message) = selected_message {
egui::TopBottomPanel::top("selected_message_top_panel")
.frame(egui::Frame::side_top_panel(&ctx.style()).inner_margin(8.0))
.show_inside(ui, |ui| {
ui.with_layout(
egui::Layout::left_to_right(egui::Align::Center),
|ui| {
ui.heading(format!("Message {}", &message.id));
ui.with_layout(
egui::Layout::right_to_left(egui::Align::Center),
|ui| {
if ui.button("✖").clicked() {
self.selected_message.take();
}
},
);
},
);
});

egui::TopBottomPanel::bottom("selected_message_bottom_panel")
.frame(egui::Frame::side_top_panel(&ctx.style()).inner_margin(8.0))
.show_inside(ui, |ui| {
if ui.button("Republish Message").clicked() {
let message_to_publish = PubsubMessageToPublish::new(
message.data.clone(),
message.attributes.clone(),
);
publish_message(
&self.front_tx,
selected_topic,
message_to_publish,
)
}
});

egui::CentralPanel::default().show_inside(ui, |ui| {
egui::ScrollArea::vertical().show(ui, |ui| {
let publish_time =
if let Some(publish_time) = message.publish_time {
let local_publish_time: DateTime<Local> =
publish_time.into();
local_publish_time.format("%d/%m/%Y %H:%M").to_string()
} else {
"<Empty>".to_string()
};

ui.horizontal(|ui| {
ui.label("Publish Time: ");
ui.monospace(publish_time);
});

egui::CollapsingHeader::new("Data")
.id_source("selected_message_data_collapsing_header")
.default_open(false)
.show(ui, |ui| {
JsonTree::new(
format!(
"selected_message_data_json_{}",
&message.id
),
&message.data_json,
)
.default_expand(DefaultExpand::All)
.response_callback(show_json_context_menu(
&message.data_json,
))
.show(ui);
});

egui::CollapsingHeader::new("Attributes")
.id_source("selected_message_attributes_collapsing_header")
.default_open(false)
.show(ui, |ui| {
if message.attributes.is_empty() {
ui.monospace("<Empty>");
} else {
JsonTree::new(
format!(
"selected_message_attributes_json_{}",
&message.id
),
&message.attributes_json,
)
.default_expand(egui_json_tree::DefaultExpand::All)
.response_callback(show_json_context_menu(
&message.attributes_json,
))
.show(ui);
}
});
ui.allocate_space(ui.available_size());
});
});
render_selected_message(
ctx,
ui,
&self.front_tx,
message,
selected_topic,
|| {
self.selected_message.take();
},
);
}
});

Expand Down
2 changes: 2 additions & 0 deletions pubsubman/src/ui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ mod json_ui;
mod messages_view;
mod modal;
mod publish_view;
mod selected_message;
mod topic_name;
mod validity_frame;

pub use json_ui::show_json_context_menu;
pub use messages_view::MessagesView;
pub use modal::Modal;
pub use publish_view::PublishView;
pub use selected_message::render_selected_message;
pub use topic_name::render_topic_name;
90 changes: 90 additions & 0 deletions pubsubman/src/ui/selected_message.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
use chrono::{DateTime, Local};
use egui_json_tree::{DefaultExpand, JsonTree};
use pubsubman_backend::{
message::FrontendMessage,
model::{PubsubMessage, PubsubMessageToPublish, TopicName},
};
use tokio::sync::mpsc::Sender;

use crate::actions::publish_message;

use super::show_json_context_menu;

pub fn render_selected_message(
ctx: &egui::Context,
ui: &mut egui::Ui,
front_tx: &Sender<FrontendMessage>,
message: &PubsubMessage,
selected_topic: &TopicName,
mut on_close: impl FnMut(),
) {
egui::TopBottomPanel::top("selected_message_top_panel")
.frame(egui::Frame::side_top_panel(&ctx.style()).inner_margin(8.0))
.show_inside(ui, |ui| {
ui.with_layout(egui::Layout::left_to_right(egui::Align::Center), |ui| {
ui.heading(format!("Message {}", &message.id));
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
if ui.button("✖").clicked() {
on_close();
}
});
});
});

egui::TopBottomPanel::bottom("selected_message_bottom_panel")
.frame(egui::Frame::side_top_panel(&ctx.style()).inner_margin(8.0))
.show_inside(ui, |ui| {
if ui.button("Republish Message").clicked() {
let message_to_publish =
PubsubMessageToPublish::new(message.data.clone(), message.attributes.clone());
publish_message(front_tx, selected_topic, message_to_publish)
}
});

egui::CentralPanel::default().show_inside(ui, |ui| {
egui::ScrollArea::vertical().show(ui, |ui| {
let publish_time = if let Some(publish_time) = message.publish_time {
let local_publish_time: DateTime<Local> = publish_time.into();
local_publish_time.format("%d/%m/%Y %H:%M").to_string()
} else {
"<Empty>".to_string()
};

ui.horizontal(|ui| {
ui.label("Publish Time: ");
ui.monospace(publish_time);
});

egui::CollapsingHeader::new("Data")
.id_source("selected_message_data_collapsing_header")
.default_open(false)
.show(ui, |ui| {
JsonTree::new(
format!("selected_message_data_json_{}", &message.id),
&message.data_json,
)
.default_expand(DefaultExpand::All)
.response_callback(show_json_context_menu(&message.data_json))
.show(ui);
});

egui::CollapsingHeader::new("Attributes")
.id_source("selected_message_attributes_collapsing_header")
.default_open(false)
.show(ui, |ui| {
if message.attributes.is_empty() {
ui.monospace("<Empty>");
} else {
JsonTree::new(
format!("selected_message_attributes_json_{}", &message.id),
&message.attributes_json,
)
.default_expand(egui_json_tree::DefaultExpand::All)
.response_callback(show_json_context_menu(&message.attributes_json))
.show(ui);
}
});
ui.allocate_space(ui.available_size());
});
});
}

0 comments on commit c4f2b4d

Please sign in to comment.