use crate::utils::defaults::{DEFAULT_EMPTY_PARAMS, DEFAULT_TEXT_ITEM};
use crate::utils::types::{HTMLResult, RUMString, SharedAppState, URLParams, URLPath};
use crate::{
rumtk_web_get_config, rumtk_web_get_text_item, rumtk_web_render_component, rumtk_web_render_html,
RUMWebTemplate,
};
use rumtk_core::rumtk_critical_section_read;
#[derive(RUMWebTemplate)]
#[template(
source = "
<body class='f12 theme-{{theme}}'>
<a href='#main-content'>Skip to main content</a>
{{header|safe}}
{{main|safe}}
{{footer|safe}}
</body>
",
ext = "html"
)]
pub struct AppBody {
theme: RUMString,
header: RUMString,
main: RUMString,
footer: RUMString,
}
pub fn app_body(path_components: URLPath, params: URLParams, state: SharedAppState) -> HTMLResult {
let theme = rumtk_web_get_text_item!(params, "theme", DEFAULT_TEXT_ITEM);
let header = rumtk_web_render_component!("header", DEFAULT_EMPTY_PARAMS, state)?.to_rumstring();
let main = rumtk_web_render_component!("main", path_components, DEFAULT_EMPTY_PARAMS, state)?.to_rumstring();
let footer = rumtk_web_render_component!(
"footer",
[(
"social_list",
rumtk_web_get_config!(state).footer_conf.socials_list.as_str()
)],
state
)?.to_rumstring();
rumtk_web_render_html!(AppBody {
theme: RUMString::from(theme),
header,
main,
footer
})
}