use crate::ctx::ClientContext;
use anyhow::Result;
use std::rc::Rc;
use std::sync::RwLock;
pub(crate) fn wire_socket(rc: Rc<RwLock<ClientContext>>) {
let on_open = {
let ctx = Rc::clone(&rc);
Box::new(move |_j| {
match crate::socket::ws_handlers::on_open(&ctx) {
Ok(_) => {}
Err(e) => error!("Error encountered running [on_open]: {}", e)
};
})
};
let on_message = {
let ctx = Rc::clone(&rc);
Box::new(move |m| {
match crate::socket::ws_handlers::on_message(&ctx, m) {
Ok(_) => {}
Err(e) => error!("Error encountered running [on_message]: {}", e)
};
})
};
let on_error = {
let ctx = Rc::clone(&rc);
Box::new(move |e| match crate::socket::ws_handlers::on_error(&ctx, e) {
Ok(_) => {}
Err(e) => error!("Error encountered running [on_error]: {}", e)
})
};
let on_close = {
let ctx = Rc::clone(&rc);
Box::new(move |_x| match crate::socket::ws_handlers::on_close(&ctx) {
Ok(_) => {}
Err(e) => error!("Error encountered running [on_close]: {}", e)
})
};
let c = rc.read().unwrap();
c.socket().set_callbacks(on_open, on_message, on_error, on_close);
}
pub(crate) fn on_load(ctx: &ClientContext) -> Result<()> {
let overview_textarea: web_sys::HtmlTextAreaElement = ctx.get_element_by_id_as("overview-sql-input")?;
overview_textarea
.focus()
.map_err(|e| anyhow::anyhow!(format!("Error attempting to focus element: {:?}", e)))?;
crate::js::wire_textarea("overview-sql-input");
Ok(())
}