Restructure view funtions

This commit is contained in:
Dietrich 2021-05-04 11:58:47 +02:00 committed by Franz Dietrich
parent fc9b18141f
commit 8ea7b6a08d
2 changed files with 139 additions and 137 deletions

View File

@ -148,94 +148,95 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
/// # Panics /// # Panics
/// Sould only panic on bugs. /// Sould only panic on bugs.
pub fn view(model: &Model) -> Node<Msg> { pub fn view(model: &Model) -> Node<Msg> {
macro_rules! t { let lang = model.i18n.clone();
{ $key:expr } => { let t = move |key: &str| lang.translate(key, None);
{
model.i18n.translate($key, None)
}
};
{ $key:expr, $args:expr } => {
{
model.i18n.translate($key, Some(&$args))
}
};
}
section![ section![
h1!("List Links Page from list_links"), h1!("List Links Page from list_links"),
table![ table![
tr![ // Add the headlines
th![ view_link_table_head(&t),
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Code)), // Add filter fields right below the headlines
t!("link-code") view_link_table_filter_input(model, &t),
], // Add all the content lines
th![
ev(Ev::Click, |_| Msg::OrderBy(
LinkOverviewColumns::Description
)),
t!("link-description")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Target)),
t!("link-target")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Author)),
t!("username")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Statistics)),
t!("statistics")
]
],
tr![
C!["filters"],
td![input![
attrs! {
At::Value => &model.formconfig.filter[LinkOverviewColumns::Code].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::CodeFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Code].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Description].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::DescriptionFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Description].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Target].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::TargetFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Target].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Author].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::AuthorFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Author].filter_input),
]],
td![]
],
model.links.iter().map(view_link) model.links.iter().map(view_link)
], ],
button![ev(Ev::Click, |_| Msg::Fetch), "Fetch links"] button![ev(Ev::Click, |_| Msg::Fetch), "Fetch links"]
] ]
} }
fn view_link_table_head<F: Fn(&str) -> String>(t: F) -> Node<Msg> {
tr![
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Code)),
t("link-code")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(
LinkOverviewColumns::Description
)),
t("link-description")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Target)),
t("link-target")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Author)),
t("username")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(LinkOverviewColumns::Statistics)),
t("statistics")
]
]
}
fn view_link_table_filter_input<F: Fn(&str) -> String>(model: &Model, t: F) -> Node<Msg> {
tr![
C!["filters"],
td![input![
attrs! {
At::Value => &model.formconfig.filter[LinkOverviewColumns::Code].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::CodeFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Code].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Description].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::DescriptionFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Description].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Target].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::TargetFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Target].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[LinkOverviewColumns::Author].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::AuthorFilterChanged),
el_ref(&model.inputs[LinkOverviewColumns::Author].filter_input),
]],
td![]
]
}
fn view_link(l: &FullLink) -> Node<Msg> { fn view_link(l: &FullLink) -> Node<Msg> {
tr![ tr![
td![&l.link.code], td![&l.link.code],

View File

@ -123,73 +123,74 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
/// # Panics /// # Panics
/// Sould only panic on bugs. /// Sould only panic on bugs.
pub fn view(model: &Model) -> Node<Msg> { pub fn view(model: &Model) -> Node<Msg> {
macro_rules! t { let lang = model.i18n.clone();
{ $key:expr } => { let t = move |key: &str| lang.translate(key, None);
{
model.i18n.translate($key, None)
}
};
{ $key:expr, $args:expr } => {
{
model.i18n.translate($key, Some(&$args))
}
};
}
section![ section![
h1!("List Users Page from list_users"), h1!("List Users Page from list_users"),
table![ table![
tr![ // Column Headlines
th![ view_user_table_head(&t),
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Id)), // Add filter fields right below the headlines
t!("userid") view_user_table_filter_input(model, &t),
], // Add all the users one line for each
th![
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Email)),
t!("email")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Username)),
t!("username")
],
],
tr![
C!["filters"],
td![input![
attrs! {
At::Value => &model.formconfig.filter[UserOverviewColumns::Id].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::IdFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Id].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[UserOverviewColumns::Email].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::EmailFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Email].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[UserOverviewColumns::Username].sieve,
At::Type => "search",
At::Placeholder => t!("search-placeholder")
},
input_ev(Ev::Input, Msg::UsernameFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Username].filter_input),
]],
],
model.users.iter().map(view_user) model.users.iter().map(view_user)
], ],
button![ev(Ev::Click, |_| Msg::Fetch), "Refresh"] button![ev(Ev::Click, |_| Msg::Fetch), "Refresh"]
] ]
} }
fn view_user_table_head<F: Fn(&str) -> String>(t: F) -> Node<Msg> {
tr![
th![
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Id)),
t("userid")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Email)),
t("email")
],
th![
ev(Ev::Click, |_| Msg::OrderBy(UserOverviewColumns::Username)),
t("username")
],
]
}
fn view_user_table_filter_input<F: Fn(&str) -> String>(model: &Model, t: F) -> Node<Msg> {
tr![
C!["filters"],
td![input![
attrs! {
At::Value => &model.formconfig.filter[UserOverviewColumns::Id].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::IdFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Id].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[UserOverviewColumns::Email].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::EmailFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Email].filter_input),
]],
td![input![
attrs! {At::Value =>
&model
.formconfig.filter[UserOverviewColumns::Username].sieve,
At::Type => "search",
At::Placeholder => t("search-placeholder")
},
input_ev(Ev::Input, Msg::UsernameFilterChanged),
el_ref(&model.inputs[UserOverviewColumns::Username].filter_input),
]],
]
}
fn view_user(l: &User) -> Node<Msg> { fn view_user(l: &User) -> Node<Msg> {
tr![ tr![
td![&l.id], td![&l.id],