use crate::defaults::{DEFAULT_NO_TEXT, PARAMS_ID, PARAMS_TYPE};
use crate::utils::defaults::{
DEFAULT_TEXT_ITEM, FORM_DATA_TYPE_HTML, FORM_DATA_TYPE_PDF, PARAMS_CONTENTS, PARAMS_CSS_CLASS,
};
use crate::utils::types::{SharedAppState, URLParams, URLPath};
use crate::{rumtk_web_get_config, rumtk_web_get_text_item, ComponentResult, RUMWebTemplate};
use rumtk_core::rumtk_generate_id;
use rumtk_core::strings::RUMString;
#[derive(RUMWebTemplate, Debug)]
#[template(
source = "
{% if custom_css_enabled %}
<link href='/static/components/content_viewer.css' rel='stylesheet'>
{% endif %}
{% if typ == FORM_DATA_TYPE_PDF %}
<object data='{{contents}}' type='application/pdf' class='f18 contact-card-{{ css_class }}-container'>
<!-- Fallback content for browsers that cannot display the PDF inline -->
<p>It appears your browser doesn't have a PDF plugin. No problem, you can
<a href='{{contents}}'>click here to download the PDF file.</a></p>
</object>
{% else if typ == FORM_DATA_TYPE_HTML %}
<div id='div-{{id}}' class='f18 contact-card-{{ css_class }}-container'></div>
<script>
const contentDiv = document.getElementById('div-{{id}}');
// Set the innerHTML to a string containing HTML markup
contentDiv.innerHTML = '{{contents|safe}}';
</script>
{% else %}
<pre id='div-{{id}}' class='f18 contact-card-{{ css_class }}-container'>
{{contents}}
</pre>
{% endif %}
",
ext = "html"
)]
pub struct ContentViewer<'a> {
id: RUMString,
typ: &'a str,
contents: &'a str,
css_class: RUMString,
custom_css_enabled: bool,
}
pub fn content_viewer<'a>(
_path_components: URLPath<'a, 'a>,
params: URLParams<'a>,
state: SharedAppState,
) -> ComponentResult<ContentViewer<'a>> {
let default_id = rumtk_generate_id!();
let id = rumtk_web_get_text_item!(params, PARAMS_ID, default_id.as_str()).to_string();
let typ = rumtk_web_get_text_item!(params, PARAMS_TYPE, DEFAULT_TEXT_ITEM);
let contents = rumtk_web_get_text_item!(params, PARAMS_CONTENTS, DEFAULT_NO_TEXT);
let css_class = rumtk_web_get_text_item!(params, PARAMS_CSS_CLASS, DEFAULT_TEXT_ITEM).to_string();
let custom_css_enabled = rumtk_web_get_config!(state).flags.custom_css;
Ok(ContentViewer {
id,
typ,
contents,
css_class,
custom_css_enabled
})
}