use istyles::istyles;
use leptos::{html::Input, prelude::*, tachys::html};
use prettytable::{Cell, Row, Table};
use reactive_stores::Store;
use wasm_bindgen::{JsCast, prelude::Closure};
use web_sys::{Blob, Event, FileReader, HtmlInputElement, MouseEvent, Url, UrlSearchParams};
use crate::{
FragileComfirmed, LoadDbOptions, PrepareOptions, SQLightError, SQLiteStatementResult,
WorkerRequest,
app::{
ImportProgress,
advanced_options_menu::AdvancedOptionsMenu,
button_set::{Button, ButtonSet, IconButton, LinkButton, Rule},
config_menu::ConfigMenu,
context_menu::ContextMenu,
database_menu::DatabaseMenu,
icon::{build_icon, config_icon, expandable_icon, github_icon, more_options_icon},
output::change_focus,
pop_button::PopButton,
state::{Focus, GlobalState, GlobalStateStoreFields},
tools_menu::ToolsMenu,
vfs_menu::VfsMenu,
},
};
istyles!(styles, "assets/module.postcss/header.module.css.map");
#[component]
pub fn Header() -> impl IntoView {
let menu_container = NodeRef::new();
let input_ref = NodeRef::new();
view! {
<>
>
}
}
pub fn execute(state: Store) -> Box {
Box::new(move || {
let Some((code, selected_code)) = state
.editor()
.read_untracked()
.as_ref()
.map(|editor| (editor.get_value(), editor.get_selected_value()))
else {
return;
};
let run_selected_code = state.run_selected_sql().get();
state.sql().set(code.clone());
change_focus(state, Some(Focus::Execute));
std::mem::take(&mut *state.output().write());
if let Some(worker) = &*state.worker().read_untracked() {
worker.send_task(WorkerRequest::Prepare(PrepareOptions {
sql: if !selected_code.is_empty() && run_selected_code {
selected_code
} else {
code
},
clear_on_prepare: !*state.keep_ctx().read_untracked(),
}));
worker.send_task(WorkerRequest::Continue);
}
})
}
#[component]
fn ExecuteButton() -> impl IntoView {
let state = expect_context::>();
let on_click = execute(state);
view! {
}
}
#[component]
fn VfsMenuButton(menu_container: NodeRef) -> impl IntoView {
let state = expect_context::>();
let button = move |toggle, node_ref| {
view! {
}
.into_any()
};
view! {
}.into_any() })
menu_container=menu_container
>
}
}
#[component]
fn ContextMenuButton(menu_container: NodeRef) -> impl IntoView {
let state = expect_context::>();
let button = move |toggle, node_ref| {
view! {
}
.into_any()
};
view! {
}.into_any() })
menu_container=menu_container
>
}
}
#[component]
fn ConfigMenuButton(menu_container: NodeRef) -> impl IntoView {
let button = |toggle, node_ref| {
view! {
}
.into_any()
};
view! {
}.into_any() })
menu_container=menu_container
>
}
}
#[component]
fn AdvancedOptionsMenuButton(menu_container: NodeRef) -> impl IntoView {
let button = |toggle, node_ref| {
view! {
{more_options_icon()}
}
.into_any()
};
view! {
}.into_any() })
menu_container=menu_container
>
}
}
#[component]
fn ToolsButton(menu_container: NodeRef) -> impl IntoView {
let button = |toggle, node_ref| {
view! {
}
.into_any()
};
view! {
}.into_any() })
menu_container=menu_container
>
}
}
#[component]
fn DatabaseButton(
input_ref: NodeRef,
menu_container: NodeRef,
) -> impl IntoView {
let state = expect_context::>();
let button = |toggle, node_ref| {
view! {
}
.into_any()
};
let (file, set_file) = signal::