Use iterator over filter variants

This commit is contained in:
Denis Kolodin 2017-12-24 11:57:14 +03:00
parent c6026281e2
commit 80fdcc2167

View File

@ -6,9 +6,10 @@ extern crate strum_macros;
#[macro_use]
extern crate yew;
use strum::IntoEnumIterator;
use yew::html::*;
#[derive(ToString, Clone, PartialEq)]
#[derive(EnumIter, ToString, Clone, PartialEq)]
enum Filter {
All,
Active,
@ -160,21 +161,7 @@ fn view(model: &Model) -> Html<Msg> {
{ " item(s) left" }
</span>
<ul class="filters",>
<li>
<a href="#/", onclick=|_| Msg::SetFilter(Filter::All),>
{ Filter::All }
</a>
</li>
<li>
<a href="#/active", onclick=|_| Msg::SetFilter(Filter::Active),>
{ Filter::Active }
</a>
</li>
<li>
<a href="#/completed", onclick=|_| Msg::SetFilter(Filter::Completed),>
{ Filter::Completed }
</a>
</li>
{ for Filter::iter().map(|flt| view_filter(&model, flt)) }
</ul>
<button class="clear-completed", onclick=|_| Msg::ClearCompleted,>
{ format!("Clear completed ({})", model.total_completed()) }
@ -190,6 +177,17 @@ fn view(model: &Model) -> Html<Msg> {
}
}
fn view_filter(_model: &Model, filter: Filter) -> Html<Msg> {
let flt = filter.clone();
html! {
<li>
<a href="#/", onclick=move |_| Msg::SetFilter(flt.clone()),>
{ filter }
</a>
</li>
}
}
fn view_input(model: &Model) -> Html<Msg> {
html! {
<input class="new-todo",