Skip to main content

showcase/pages/
navigation.rs

1use material::widget::page;
2use material_ui_rs as material;
3
4use super::super::{Message, NAV_DESTINATIONS, Showcase, TabChoice};
5
6pub(super) fn view(state: &Showcase) -> material::Element<'_, Message> {
7    let selection = state.navigation_selection();
8    let bar = material::widget::navigation::navigation_bar(
9        &NAV_DESTINATIONS,
10        selection,
11        Message::Navigate,
12    );
13    let rail = material::widget::navigation::navigation_rail_with_menu_fitting_content(
14        &NAV_DESTINATIONS,
15        selection,
16        Message::Navigate,
17        Message::MenuPressed,
18    );
19    let expanded_rail =
20        material::widget::navigation::navigation_rail_expanded_with_menu_fitting_content(
21            "Showcase",
22            &NAV_DESTINATIONS,
23            selection,
24            Message::Navigate,
25            Message::MenuPressed,
26        );
27
28    page::sections([
29        page::section("Tabs", tabs(state)).into(),
30        page::section("Navigation bar", bar).into(),
31        page::section("Navigation rail with menu", rail).into(),
32        page::section("Expanded navigation rail", expanded_rail).into(),
33    ])
34    .into()
35}
36
37fn tabs(state: &Showcase) -> material::Element<'_, Message> {
38    page::component_stack([
39        material::widget::tabs::animated_primary_icon_label_bar(
40            &state.primary_tab_state,
41            [
42                (
43                    "input",
44                    "Inputs",
45                    Message::PrimaryTabSelected(TabChoice::Inputs),
46                ),
47                (
48                    "tune",
49                    "Controls",
50                    Message::PrimaryTabSelected(TabChoice::Controls),
51                ),
52                (
53                    "info",
54                    "Feedback",
55                    Message::PrimaryTabSelected(TabChoice::Feedback),
56                ),
57            ],
58        )
59        .into(),
60        material::widget::tabs::animated_secondary_label_bar(
61            &state.secondary_tab_state,
62            [
63                ("Overview", Message::SecondaryTabSelected(TabChoice::Inputs)),
64                (
65                    "Details",
66                    Message::SecondaryTabSelected(TabChoice::Controls),
67                ),
68                (
69                    "History",
70                    Message::SecondaryTabSelected(TabChoice::Feedback),
71                ),
72            ],
73        )
74        .into(),
75    ])
76    .into()
77}