use super::*;
#[component]
pub(crate) fn page_websocket(node: VirtualNode<PageWebsocketProps>) -> VirtualNode {
let PageWebsocketProps: PageWebsocketProps = node.try_get_props().unwrap_or_default();
let state: UseWebSocket = use_websocket();
ws_cleanup(state);
html! {
div {
class: c_page_container()
euv_header {
icon: "🔌"
title: WEBSOCKET_HEADER_TITLE
subtitle: WEBSOCKET_HEADER_SUBTITLE
}
euv_card {
title: WEBSOCKET_CONNECTION_CARD_TITLE
p {
class: c_demo_text()
WEBSOCKET_CONNECTION_CARD_DESCRIPTION
}
div {
class: c_button_controls()
if { state.get_connecting().get() } {
euv_button {
variant: EuvButtonVariant::Primary
label: WEBSOCKET_WAIT_LABEL
disabled: state.get_connecting()
}
} else if { state.get_connected().get() } {
euv_button {
variant: EuvButtonVariant::Primary
label: WEBSOCKET_DISCONNECT_LABEL
onclick: websocket_on_disconnect(state)
}
} else {
euv_button {
variant: EuvButtonVariant::Primary
label: WEBSOCKET_CONNECT_LABEL
onclick: websocket_on_connect(state)
}
}
}
if { !state.get_error().get().is_empty() } {
div {
class: c_error_box()
state.get_error()
}
}
}
if { state.get_connected().get() } {
euv_card {
title: WEBSOCKET_SEND_CARD_TITLE
div {
class: c_inline_input_row()
euv_input {
placeholder: "Enter message to send"
value: state.get_message_input()
oninput: UseEuvInput::on_input_value(state.get_message_input())
class: c_ws_message_input().clone()
}
div {
class: c_inline_input_button_wrap()
euv_button {
variant: EuvButtonVariant::Primary
label: WEBSOCKET_SEND_LABEL
onclick: websocket_on_send(state)
}
}
}
}
}
euv_card {
title: WEBSOCKET_MESSAGES_CARD_TITLE
if { state.get_messages().get().is_empty() } {
div {
class: c_net_messages_empty()
WEBSOCKET_MESSAGES_EMPTY_TEXT
}
} else {
div {
class: c_net_messages_list()
for (index, message) in { state.get_messages().get().iter().enumerate() } {
div {
key: index.to_string()
class: c_net_message_item()
span {
class: c_net_message_index()
format!("#{}", index + 1)
}
span {
class: c_net_message_data()
message.data.clone()
}
if !message.time.is_empty() {
span {
class: c_ws_message_time()
message.time.clone()
}
}
}
}
}
}
}
}
}
}