widget:ticketdata: introduce message passing

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2021-03-03 11:47:26 +01:00
parent 202ba81b4f
commit 8af49deb34
2 changed files with 86 additions and 30 deletions

View File

@@ -12,17 +12,17 @@ use serde::Deserialize;
//use std::process;
//use std::collections::HashMap;
use std::time::SystemTime;
//use tracing::{error, info, trace};
use tracing::trace;
use tracing::{info, trace};
use crate::{
data::constants::*,
widgets::global_state::GlobalState,
//services::exports::sendticketdata,
widgets::policycheck::policycheck_state::{PolicycheckAction, PolicycheckState},
};
/// Valid `actions` that are handled as state changes in the `Ticketdata` widget.
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone)]
pub enum TicketdataAction {
ClearEntry(Entity),
/// Clear text in the form
@@ -35,7 +35,18 @@ pub enum TicketdataAction {
SetEntry(Entity),
SendForm(),
SetVisibility(Entity),
TextChanged(Entity, usize)
TextChanged(Entity, usize),
UpdatePolicyNumber(String)
}
/// Handel fields of an Email (header, body)
#[derive(Clone, PartialEq)]
pub struct Email {
recipient_to: String,
recipient_cc: String,
sender: String,
subject: String,
body: String,
}
/// Define valid environment variables provided via .env files
@@ -50,10 +61,11 @@ struct Environment {
/// Valid `structures` that are handled inside the state of the `Ticket` widget.
#[derive(AsAny, Default)]
pub struct TicketdataState {
action: Option<TicketdataAction>,
actions: Vec<TicketdataAction>,
button_menu: Entity,
//duration: Duration,
lang: String,
button_menu: Entity
target: Entity
}
impl GlobalState for TicketdataState {}
@@ -61,7 +73,7 @@ impl GlobalState for TicketdataState {}
/// Method definitions, that react on any given state change inside the `Ticketdata` widget.
impl TicketdataState {
/// Clear text in text box.
pub fn clear_entry(ctx: &mut Context<'_>, entity: Entity) {
pub fn clear_entry(entity: Entity, ctx: &mut Context<'_>) {
if let Some(count) = ctx.get_widget(entity).children_count() {
println!("Widget name: {:?}", ctx.get_widget(entity).get::<String>("name"));
println!("Widget id: {:?}", ctx.get_widget(entity).get::<String>("id"));
@@ -79,23 +91,25 @@ impl TicketdataState {
//println!("Text: {:?}", ctx.get_widget(entity).entity_of_child(entity));
//TextBlock::text_set(&mut ctx.child(ID_TICKET_DATA_POLICY_HOLDER), "");
}
}
//TextBox::text_set(&mut ctx.widget(entity), String::from(""));
}
/// Clear ticket data form
pub fn send_message(&mut self) {
println!("WIP: send_message");
//self.action.push(TicketdataAction::ClearForm());
//self.clear_entry(ticket_data_policy_holder);
pub fn send_form(entity: Entity, _ctx: &mut Context<'_>) {
info!("WIP: Sending form to construct eMail for {:?}", entity);
}
/// Sets a new action.
pub fn set_action(&mut self, action: TicketdataAction) {
self.action = action.into();
/// sending message 'ClearForm'
pub fn send_message_clear_form(&mut self) {
info!("Sending message 'TicketdataAction::ClearForm'");
self.actions.push(TicketdataAction::ClearForm());
}
/// sending message 'SendForm'
pub fn send_message_send_form(&mut self) {
info!("Sending message 'TicketdataAction::SendForm'");
self.actions.push(TicketdataAction::SendForm());
}
}
/// Supported methods handled inside the `TicketState`
@@ -111,6 +125,9 @@ impl State for TicketdataState {
.entity_of_child(ID_TICKET_DATA_BUTTON_MENU)
.expect("TicketState.init: Can't find resource entity 'ID_TICKET_DATA_BUTTON_MENU'.");
self.target = Entity::from(ctx.widget().try_clone::<u32>("target")
.expect("TicketState.init: Can't find resource entity 'target'."));
// Get language from environment
self.lang = TicketdataState::get_lang();
@@ -129,15 +146,48 @@ impl State for TicketdataState {
for action in messages.read::<TicketdataAction>() {
match action {
TicketdataAction::ClearForm() => {
println!("WIP: Message 'ClearForm' received");
TicketdataState::clear_entry(ctx, ctx.entity())
//TicketdataState::clear_entry(ctx, ctx.entity());
println!("message: {:?} recieved", action);
info!("message: {:?} recieved", action);
//TicketdataState::clear_entry(ctx.entity(), ctx);
//ctx.clear_children_of(self.ticket_data_form);
}
TicketdataAction::SendForm() => {
println!("WIP: Message 'SendForm' received");
println!("message: {:?} recieved", action);
info!("message: {:?} recieved", action);
TicketdataState::send_form(ctx.entity(), ctx);
}
_ => { println!("messages: action not implemented!"); }
}
}
for action in messages.read::<PolicycheckAction>() {
match action {
PolicycheckAction::UpdatePolicyNumber(policy_number) => {
info!("Message received: 'PolicycheckAction::UpdatePolicyNumber({:?})'", policy_number);
//progress_bar.set::<f64>("val", current_progress + amount);
//TextBlock::text_set(&mut ctx.child(ID_TICKET_DATA_POLICY_NUMBER), "9999999992");
TextBlock::text_set(&mut ctx.child(ID_TICKET_DATA_POLICY_NUMBER), policy_number);
}
_ => { println!("messages: action not implemented!"); }
}
}
}
fn update(&mut self, _: &mut Registry, ctx: &mut Context<'_>) {
let actions: Vec<TicketdataAction> = self.actions.drain(..).collect();
for action in actions {
match action {
TicketdataAction::ClearForm() => {
info!("update: send_message {:?}", action);
ctx.send_message(TicketdataAction::ClearForm(), self.target);
}
TicketdataAction::SendForm() => {
//ctx.send_message(TicketdataAction::SendForm(), self.ID_TICKETDATA_FORM);
info!("update: send_message {:?}", action);
}
_ => { println!("TicketdataAction: action not implemented!"); }
}
}
}
}

View File

@@ -12,16 +12,20 @@ use orbtk::{
use crate::{
data::constants::*,
widgets::ticketdata::ticketdata_state::{TicketdataAction, TicketdataState},
//widgets::ticketdata::ticketdata_state::{TicketdataAction, TicketdataState},
widgets::ticketdata::ticketdata_state::TicketdataState,
};
// Macro that initializes the widget structures/variables for the policy check view
widget!(
/// Form to enter data of a ticket record
TicketdataView<TicketdataState> {
// language used inside the widget
lang: String,
policy_data_count: u32,
ticket_data_title: String
// title used in the header
ticket_data_title: String,
// entity id that will receive the messages
target: u32
}
);
@@ -262,9 +266,10 @@ impl Template for TicketdataView {
.style(STYLE_BUTTON_ACTION)
.text("Clear")
.on_click(move |states, _| {
println!("WIP: clear from");
states.send_message(TicketdataAction::ClearForm, id);
true
//println!("WIP: clear from");
//states.send_message(TicketdataAction::ClearForm, id);
states.get_mut::<TicketdataState>(id).send_message_clear_form();
false
})
.build(ctx),
)
@@ -274,10 +279,11 @@ impl Template for TicketdataView {
.style(STYLE_BUTTON_ACTION)
.text("Send")
//.visibility(Visibility::Collapsed)
.on_click(move |states, _| {
println!("WIP: send mail");
states.send_message(TicketdataAction::SendForm, id);
true
.on_click(move |states, _entity| {
//println!("WIP: send mail");
//states.get_mut::<TicketdataAction>(id).send_message(TicketdataAction::SendForm, id);
states.get_mut::<TicketdataState>(id).send_message_send_form();
false
})
.build(ctx),
)