use crate::components::app::app_footer::app_footer;
use crate::components::app::app_nav::app_nav;
use crate::components::html::main;
use crate::utils::defaults::DEFAULT_EMPTY_PARAMS;
use crate::utils::types::{SharedAppState, URLParams, URLPath};
use crate::{rumtk_web_get_config, sanitize_html, ComponentResult, RUMWebTemplate, RUMWebTemplateSafe};
use rumtk_core::strings::RUMString;
#[derive(RUMWebTemplate)]
#[template(
source = "
<body class='f12 fw300 theme-{{theme}}'>
<a href='#main-content header' hidden>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,
}
impl RUMWebTemplateSafe for AppBody {}
pub fn app_body<'a>(path_components: URLPath<'a, 'a>, params: URLParams<'a>, state: SharedAppState) -> ComponentResult<AppBody> {
let theme = rumtk_web_get_config!(state).theme.clone();
let header = app_nav(path_components, DEFAULT_EMPTY_PARAMS.get_inner(), state.clone())?;
let main = main(path_components, DEFAULT_EMPTY_PARAMS.get_inner(), state.clone())?;
let footer = app_footer(
path_components,
params,
state
)?;
let rendered_header = sanitize_html(&header.to_string(), true);
let rendered_main = sanitize_html(&main.to_string(), true);
let rendered_footer = sanitize_html(&footer.to_string(), true);
Ok(AppBody {
theme,
header: rendered_header,
main: rendered_main,
footer: rendered_footer,
})
}