dialtone_yew 0.1.0

Dialtone Yew Webapp
use std::rc::Rc;

use crate::components::common::dt_button::*;
use crate::components::common::main_layout::*;
use crate::components::common::titled_panel::*;
use crate::{AppSiteConnection, MainRoute};
use bounce::use_atom_setter;
use yew::prelude::*;
use yew_router::prelude::*;

struct LogoutFormState {
    pub history: AnyHistory,
    pub sc_atom: Rc<dyn Fn(AppSiteConnection)>,
}

#[function_component(Logout)]
pub fn logout() -> Html {
    let form_state = Rc::new(LogoutFormState {
        history: use_history().unwrap(),
        sc_atom: use_atom_setter::<AppSiteConnection>(),
    });

    let on_button_click = {
        Callback::from(move |_| {
            let form_state = Rc::clone(&form_state);
            AppSiteConnection::reset();
            let app_site_connection = AppSiteConnection::default();
            (form_state.sc_atom)(app_site_connection);
            form_state.history.push(MainRoute::Home);
        })
    };

    let h = html! {
        <MainLayout>
            <div class="centered_form_page">
                <TitledPanel title="Logout">
                    <form class="one_column_form" onsubmit={Callback::from(|e: FocusEvent| e.prevent_default())}>
                        <DtButton text="Logout" disabled=false on_click={on_button_click.clone()} id="logout_button" in_progress=false/>
                    </form>
                </TitledPanel>
            </div>
        </MainLayout>
    };
    h
}