dbui-client 0.0.64

WASM web client sources for dbui
use crate::ctx::ClientContext;
use dbui_core::RequestMessage;

use anyhow::Result;
use uuid::Uuid;

pub(crate) struct EventHandler {}

impl EventHandler {
  pub(crate) fn handle(ctx: &ClientContext, t: &str, k: &str, v: &str) -> Result<()> {
    match t {
      "new-query" => {
        let id = Uuid::new_v4();
        match ctx.tabs().get_tab(&id.to_string()) {
          Some(idx) => ctx.tabs().activate_tab(idx)?,
          None => {
            let template = crate::templates::query::new_query(&ctx, &id);
            ctx.tabs().add_tab(&id.to_string(), Some("pencil"), "New Query", template, &ctx)?
          }
        };
      }
      "run-sql" => {
        let id = Uuid::new_v4();
        let msg = RequestMessage::RunQuery {
          id,
          ctx: k.into(),
          sql: v.into()
        };
        ctx.send(msg);
      }
      "table-sql" => {}
      "table-detail" => {
        let id = format!("table-{}", k);
        match ctx.tabs().get_tab(&id) {
          Some(idx) => ctx.tabs().activate_tab(idx)?,
          None => {
            let template = crate::templates::table::table(ctx, k);
            ctx.tabs().add_tab(&id, Some("bookmark"), k, template, &ctx)?
          }
        };
      }
      "refresh-schema" => ctx.send(RequestMessage::RefreshSchema { full: true }),
      _ => warn!("Unhandled event [{}]", t)
    };
    Ok(())
  }
}