use crate::*;
pub(crate) fn page_dynamic_component() -> VirtualNode {
let tag_name: Signal<String> = use_signal(|| DEFAULT_TAG_NAME.to_string());
let content: Signal<String> = use_signal(|| "Hello, dynamic tag!".to_string());
html! {
div {
class: c_page_container()
page_header("Dynamic Tag", "Switch tags at runtime using the {tag} { content } syntax.")
my_card {
title: "Tag Type Selection"
p {
class: c_demo_text()
"Select a tag type below. Native HTML elements (div, span) and user components (my_card, badge) are both supported."
}
div {
class: c_dynamic_component_tab_bar()
primary_button {
label: TAG_OPTION_DIV_LABEL
onclick: tag_on_select(tag_name, TAG_NAME_DIV)
TAG_OPTION_DIV_LABEL
}
primary_button {
label: TAG_OPTION_SPAN_LABEL
onclick: tag_on_select(tag_name, TAG_NAME_SPAN)
TAG_OPTION_SPAN_LABEL
}
primary_button {
label: TAG_OPTION_MY_CARD_LABEL
onclick: tag_on_select(tag_name, TAG_NAME_MY_CARD)
TAG_OPTION_MY_CARD_LABEL
}
primary_button {
label: TAG_OPTION_BADGE_LABEL
onclick: tag_on_select(tag_name, TAG_NAME_BADGE)
TAG_OPTION_BADGE_LABEL
}
}
}
my_card {
title: "Dynamic Tag Content"
div {
class: c_form_input_wrapper()
label {
r#for: TAG_CONTENT_INPUT_ID
class: c_form_label()
"Content Text"
}
input {
id: TAG_CONTENT_INPUT_ID
name: TAG_CONTENT_INPUT_ID
r#type: "text"
placeholder: TAG_CONTENT_PLACEHOLDER
value: content
autocomplete: TAG_AUTOCOMPLETE_OFF
class: c_form_input()
oninput: content_on_input(content)
}
}
}
my_card {
title: "Result"
p {
class: c_demo_text_muted()
{ format!("Current tag: {}", tag_name.get()) }
}
div {
class: c_dynamic_component_panel()
{ tag_name.get() } {
title: "Dynamic my_card"
onclick: badge_on_click("Dynamic Badge", LogLevel::Log)
{ content.get() }
}
}
}
}
}
}