use crate::utils::defaults::{
DEFAULT_CONTACT_ITEM, DEFAULT_TEXT_ITEM, PARAMS_CSS_CLASS, PARAMS_FUNCTION, PARAMS_TYPE,
};
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,
};
#[derive(RUMWebTemplate, Debug)]
#[template(
source = "
{% if custom_css_enabled %}
<link href='/static/components/contact_button.css' rel='stylesheet'>
{% endif %}
<script type='module' id='contact_button'>
export function goto_contact() {
window.location.href = './contact';
}
// @ts-ignore
window.goto_contact = goto_contact;
</script>
<div class='contact-{{ css_class }}-button-container'>
<button class='contact-{{ css_class }}-button' onclick='{{ send_function }}()'>
{{title|safe}}
</button>
</div>
",
ext = "html"
)]
pub struct ContactButton {
title: RUMString,
send_function: RUMString,
css_class: RUMString,
custom_css_enabled: bool,
}
pub fn contact_button(
_path_components: URLPath,
params: URLParams,
state: SharedAppState,
) -> HTMLResult {
let typ = rumtk_web_get_text_item!(params, PARAMS_TYPE, DEFAULT_CONTACT_ITEM);
let send_function = rumtk_web_get_text_item!(params, PARAMS_FUNCTION, DEFAULT_CONTACT_ITEM);
let css_class = rumtk_web_get_text_item!(params, PARAMS_CSS_CLASS, DEFAULT_TEXT_ITEM);
let custom_css_enabled = rumtk_web_get_config!(state).custom_css;
let title = rumtk_web_render_component!("title", [("type", typ)], state)?.to_rumstring();
rumtk_web_render_html!(ContactButton {
title,
send_function: RUMString::from(send_function),
css_class: RUMString::from(css_class),
custom_css_enabled
})
}