rumtk_web/components/widgets/
youtrack.rs1use crate::utils::types::{SharedAppState, URLParams, URLPath};
21use crate::{rumtk_web_get_config, ComponentResult, RUMWebTemplate, RUMWebTemplateSafe, DEFAULT_TEXTMAP};
22use rumtk_core::strings::RUMString;
23
24pub const YOUTRACK_SANITIZER_TAGS: &str = "script";
25pub const YOUTRACK_SANITIZER_ATTRIBUTES: &[&str] = &[
26 "data-yt-url",
27 "data-theme",
28 "data-lang",
29];
30
31#[derive(RUMWebTemplate, Debug, Clone)]
32#[template(
33 source = "
34 <script
35 id='2cf86344-cf91-4511-a292-de40ae00fc19'
36 data-yt-url='https://{{portal}}.youtrack.cloud'
37 src='https://{{portal}}.youtrack.cloud/static/simplified/form/form-entry.js'
38 data-theme='{{theme}}'
39 data-lang='{{lang}}'
40 async
41 defer
42 >
43 </script>
44 ",
45 ext = "html"
46)]
47pub struct YouTrack {
48 portal: RUMString,
49 uuid: RUMString,
50 theme: RUMString,
51 lang: RUMString,
52}
53
54impl RUMWebTemplateSafe for YouTrack {}
55
56pub fn youtrack<'a>(_path_components: URLPath<'a, 'a>, params: URLParams<'a>, state: SharedAppState) -> ComponentResult<YouTrack> {
57 let route_info = match rumtk_web_get_config!(state).router.get_service_route(&"youtrack".to_string()){
58 Some(portal) => portal.clone(),
59 None => DEFAULT_TEXTMAP.clone(),
60 };
61 let portal = route_info.get("portal").unwrap().clone();
62 let uuid = route_info.get("uuid").unwrap().clone();
63 let theme = rumtk_web_get_config!(state).theme.clone();
64 let lang = rumtk_web_get_config!(state).lang.clone();
65
66 Ok(YouTrack {
67 portal,
68 uuid,
69 theme,
70 lang,
71 })
72}
73