mirror of
https://github.com/adoyle0/leptos-use.git
synced 2025-02-02 10:54:15 -05:00
WIP: Use builder(into)
- still failing
This commit is contained in:
parent
12eb953c70
commit
2c62c85801
2 changed files with 44 additions and 41 deletions
|
@ -2,6 +2,8 @@ use leptos::*;
|
||||||
use leptos_use::docs::demo_or_body;
|
use leptos_use::docs::demo_or_body;
|
||||||
use leptos_use::websocket::*;
|
use leptos_use::websocket::*;
|
||||||
|
|
||||||
|
use web_sys::{CloseEvent, Event};
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
fn Demo(cx: Scope) -> impl IntoView {
|
fn Demo(cx: Scope) -> impl IntoView {
|
||||||
let (history, set_history) = create_signal(cx, vec![]);
|
let (history, set_history) = create_signal(cx, vec![]);
|
||||||
|
@ -79,30 +81,30 @@ fn Demo(cx: Scope) -> impl IntoView {
|
||||||
"wss://echo.websocket.events/".to_string(),
|
"wss://echo.websocket.events/".to_string(),
|
||||||
UseWebSocketOptions::default()
|
UseWebSocketOptions::default()
|
||||||
.manual(true)
|
.manual(true)
|
||||||
.onopen(Some(Box::new(move |e| {
|
.onopen(move |e: Event| {
|
||||||
set_history2.update(|history: &mut Vec<_>| {
|
set_history2.update(|history: &mut Vec<_>| {
|
||||||
history.push(format! {"[onopen]: event {:?}", e.type_()})
|
history.push(format! {"[onopen]: event {:?}", e.type_()})
|
||||||
});
|
});
|
||||||
})))
|
})
|
||||||
.onclose(Some(Box::new(move |e| {
|
.onclose(move |e: CloseEvent| {
|
||||||
set_history2.update(|history: &mut Vec<_>| {
|
set_history2.update(|history: &mut Vec<_>| {
|
||||||
history.push(format! {"[onclose]: event {:?}", e.type_()})
|
history.push(format! {"[onclose]: event {:?}", e.type_()})
|
||||||
});
|
});
|
||||||
})))
|
})
|
||||||
.onerror(Some(Box::new(move |e| {
|
.onerror(move |e: Event| {
|
||||||
set_history2.update(|history: &mut Vec<_>| {
|
set_history2.update(|history: &mut Vec<_>| {
|
||||||
history.push(format! {"[onerror]: event {:?}", e.type_()})
|
history.push(format! {"[onerror]: event {:?}", e.type_()})
|
||||||
});
|
});
|
||||||
})))
|
})
|
||||||
.onmessage(Some(Box::new(move |m| {
|
.onmessage(move |m: String| {
|
||||||
set_history2
|
set_history2
|
||||||
.update(|history: &mut Vec<_>| history.push(format! {"[onmessage]: {:?}", m}));
|
.update(|history: &mut Vec<_>| history.push(format! {"[onmessage]: {:?}", m}));
|
||||||
})))
|
})
|
||||||
.onmessage_bytes(Some(Box::new(move |m| {
|
.onmessage_bytes(move |m: Vec<u8>| {
|
||||||
set_history2.update(|history: &mut Vec<_>| {
|
set_history2.update(|history: &mut Vec<_>| {
|
||||||
history.push(format! {"[onmessage_bytes]: {:?}", m})
|
history.push(format! {"[onmessage_bytes]: {:?}", m})
|
||||||
});
|
});
|
||||||
}))),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
let open_connection2 = move |_| {
|
let open_connection2 = move |_| {
|
||||||
|
|
|
@ -7,9 +7,7 @@ use std::time::Duration;
|
||||||
use default_struct_builder::DefaultBuilder;
|
use default_struct_builder::DefaultBuilder;
|
||||||
use js_sys::Array;
|
use js_sys::Array;
|
||||||
use wasm_bindgen::{prelude::*, JsCast, JsValue};
|
use wasm_bindgen::{prelude::*, JsCast, JsValue};
|
||||||
use web_sys::{BinaryType, Event, MessageEvent, WebSocket};
|
use web_sys::{BinaryType, CloseEvent, Event, MessageEvent, WebSocket};
|
||||||
|
|
||||||
pub use web_sys::CloseEvent;
|
|
||||||
|
|
||||||
use crate::utils::CloneableFnMutWithArg;
|
use crate::utils::CloneableFnMutWithArg;
|
||||||
|
|
||||||
|
@ -181,9 +179,9 @@ pub fn use_websocket_with_options(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(onopen) = onopen_ref.get_value().as_mut() {
|
let mut onopen = onopen_ref.get_value();
|
||||||
onopen(e);
|
onopen(e);
|
||||||
}
|
|
||||||
set_ready_state.set(UseWebSocketReadyState::Open);
|
set_ready_state.set(UseWebSocketReadyState::Open);
|
||||||
}) as Box<dyn FnMut(Event)>);
|
}) as Box<dyn FnMut(Event)>);
|
||||||
web_socket.set_onopen(Some(onopen_closure.as_ref().unchecked_ref()));
|
web_socket.set_onopen(Some(onopen_closure.as_ref().unchecked_ref()));
|
||||||
|
@ -206,9 +204,9 @@ pub fn use_websocket_with_options(
|
||||||
},
|
},
|
||||||
|txt| {
|
|txt| {
|
||||||
let txt = String::from(&txt);
|
let txt = String::from(&txt);
|
||||||
if let Some(onmessage) = onmessage_ref.get_value().as_mut() {
|
let mut onmessage = onmessage_ref.get_value();
|
||||||
onmessage(txt.clone());
|
onmessage(txt.clone());
|
||||||
}
|
|
||||||
set_message.set(Some(txt.clone()));
|
set_message.set(Some(txt.clone()));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -216,11 +214,9 @@ pub fn use_websocket_with_options(
|
||||||
|array_buffer| {
|
|array_buffer| {
|
||||||
let array = js_sys::Uint8Array::new(&array_buffer);
|
let array = js_sys::Uint8Array::new(&array_buffer);
|
||||||
let array = array.to_vec();
|
let array = array.to_vec();
|
||||||
if let Some(onmessage_bytes) = onmessage_bytes_ref.get_value().as_mut()
|
let mut onmessage_bytes = onmessage_bytes_ref.get_value();
|
||||||
{
|
onmessage_bytes(array.clone());
|
||||||
let array = array.clone();
|
|
||||||
onmessage_bytes(array);
|
|
||||||
}
|
|
||||||
set_message_bytes.set(Some(array));
|
set_message_bytes.set(Some(array));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -240,9 +236,9 @@ pub fn use_websocket_with_options(
|
||||||
reconnect();
|
reconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(onerror) = onerror_ref.get_value().as_mut() {
|
let mut onerror = onerror_ref.get_value();
|
||||||
onerror(e);
|
onerror(e);
|
||||||
}
|
|
||||||
set_ready_state.set(UseWebSocketReadyState::Closed);
|
set_ready_state.set(UseWebSocketReadyState::Closed);
|
||||||
}) as Box<dyn FnMut(Event)>);
|
}) as Box<dyn FnMut(Event)>);
|
||||||
web_socket.set_onerror(Some(onerror_closure.as_ref().unchecked_ref()));
|
web_socket.set_onerror(Some(onerror_closure.as_ref().unchecked_ref()));
|
||||||
|
@ -259,9 +255,9 @@ pub fn use_websocket_with_options(
|
||||||
reconnect();
|
reconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(onclose) = onclose_ref.get_value().as_mut() {
|
let mut onclose = onclose_ref.get_value();
|
||||||
onclose(e);
|
onclose(e);
|
||||||
}
|
|
||||||
set_ready_state.set(UseWebSocketReadyState::Closed);
|
set_ready_state.set(UseWebSocketReadyState::Closed);
|
||||||
})
|
})
|
||||||
as Box<dyn FnMut(CloseEvent)>);
|
as Box<dyn FnMut(CloseEvent)>);
|
||||||
|
@ -372,18 +368,23 @@ impl fmt::Display for UseWebSocketReadyState {
|
||||||
|
|
||||||
/// Options for [`use_websocket_with_options`].
|
/// Options for [`use_websocket_with_options`].
|
||||||
// #[doc(cfg(feature = "websocket"))]
|
// #[doc(cfg(feature = "websocket"))]
|
||||||
#[derive(DefaultBuilder, Clone)]
|
#[derive(DefaultBuilder)]
|
||||||
pub struct UseWebSocketOptions {
|
pub struct UseWebSocketOptions {
|
||||||
/// `WebSocket` connect callback.
|
/// `WebSocket` connect callback.
|
||||||
onopen: Option<Box<dyn CloneableFnMutWithArg<Event>>>,
|
#[builder(into)]
|
||||||
|
onopen: Box<dyn CloneableFnMutWithArg<Event>>,
|
||||||
/// `WebSocket` message callback for text.
|
/// `WebSocket` message callback for text.
|
||||||
onmessage: Option<Box<dyn CloneableFnMutWithArg<String>>>,
|
#[builder(into)]
|
||||||
|
onmessage: Box<dyn CloneableFnMutWithArg<String>>,
|
||||||
/// `WebSocket` message callback for binary.
|
/// `WebSocket` message callback for binary.
|
||||||
onmessage_bytes: Option<Box<dyn CloneableFnMutWithArg<Vec<u8>>>>,
|
#[builder(into)]
|
||||||
|
onmessage_bytes: Box<dyn CloneableFnMutWithArg<Vec<u8>>>,
|
||||||
/// `WebSocket` error callback.
|
/// `WebSocket` error callback.
|
||||||
onerror: Option<Box<dyn CloneableFnMutWithArg<Event>>>,
|
#[builder(into)]
|
||||||
|
onerror: Box<dyn CloneableFnMutWithArg<Event>>,
|
||||||
/// `WebSocket` close callback.
|
/// `WebSocket` close callback.
|
||||||
onclose: Option<Box<dyn CloneableFnMutWithArg<CloseEvent>>>,
|
#[builder(into)]
|
||||||
|
onclose: Box<dyn CloneableFnMutWithArg<CloseEvent>>,
|
||||||
/// Retry times.
|
/// Retry times.
|
||||||
reconnect_limit: Option<u64>,
|
reconnect_limit: Option<u64>,
|
||||||
/// Retry interval(ms).
|
/// Retry interval(ms).
|
||||||
|
@ -397,11 +398,11 @@ pub struct UseWebSocketOptions {
|
||||||
impl Default for UseWebSocketOptions {
|
impl Default for UseWebSocketOptions {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
onopen: None,
|
onopen: Box::new(|_| {}),
|
||||||
onmessage: None,
|
onmessage: Box::new(|_| {}),
|
||||||
onmessage_bytes: None,
|
onmessage_bytes: Box::new(|_| {}),
|
||||||
onerror: None,
|
onerror: Box::new(|_| {}),
|
||||||
onclose: None,
|
onclose: Box::new(|_| {}),
|
||||||
reconnect_limit: Some(3),
|
reconnect_limit: Some(3),
|
||||||
reconnect_interval: Some(3 * 1000),
|
reconnect_interval: Some(3 * 1000),
|
||||||
manual: false,
|
manual: false,
|
||||||
|
|
Loading…
Add table
Reference in a new issue