Skip to content

Commit e5a8334

Browse files
committed
feat: make queries more general
1 parent 510921d commit e5a8334

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed

src/dashboard/query_editor.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ use monaco::{
1212
};
1313
use wasm_bindgen::{closure::Closure, JsCast};
1414

15-
use crate::{modals::add_custom_query::AddCustomQuery, store::tabs::TabsStore};
15+
use crate::{
16+
modals::add_custom_query::AddCustomQuery,
17+
store::{projects::ProjectsStore, tabs::TabsStore},
18+
};
1619

1720
pub type ModelCell = Rc<RefCell<Option<CodeEditor>>>;
1821
pub const MODE_ID: &str = "pgsql";
@@ -24,6 +27,8 @@ pub fn QueryEditor(index: usize) -> impl IntoView {
2427
Some(project) => Some(project.clone()),
2528
_ => None,
2629
};
30+
let projects_store = expect_context::<ProjectsStore>();
31+
let project_driver = projects_store.select_driver_by_project(active_project().as_deref());
2732
let tabs_store_rc = Rc::new(RefCell::new(tabs_store));
2833
let show = create_rw_signal(false);
2934
let _ = use_event_listener(use_document(), ev::keydown, move |event| {
@@ -86,7 +91,11 @@ pub fn QueryEditor(index: usize) -> impl IntoView {
8691
<div _ref=node_ref class="border-b-1 border-neutral-200 h-72 sticky">
8792
<div class="absolute bottom-0 items-center text-xs flex justify-between px-4 left-0 w-full h-10 bg-gray-50">
8893
<Show when=move || active_project().is_some() fallback=|| view! { <div></div> }>
89-
<AddCustomQuery show=show project_id=active_project().unwrap()/>
94+
<AddCustomQuery
95+
show=show
96+
project_id=active_project().unwrap()
97+
driver=project_driver
98+
/>
9099
<div class="appearance-auto py-1 px-2 border-1 border-neutral-200 bg-white hover:bg-neutral-200 rounded-md">
91100
{active_project}
92101
</div>

src/modals/add_custom_query.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
use std::rc::Rc;
22

3+
use common::enums::Drivers;
34
use leptos::*;
45
use thaw::{Modal, ModalFooter};
56

67
use crate::store::queries::QueriesStore;
78

89
#[component]
9-
pub fn AddCustomQuery(show: RwSignal<bool>, project_id: String) -> impl IntoView {
10+
pub fn AddCustomQuery(show: RwSignal<bool>, project_id: String, driver: Drivers) -> impl IntoView {
1011
let project_id = Rc::new(project_id);
1112
let project_id_clone = project_id.clone();
1213
let query_store = expect_context::<QueriesStore>();
1314
let (title, set_title) = create_signal(String::new());
1415
let insert_query = create_action(
15-
move |(query_db, project_id, title): &(QueriesStore, String, String)| {
16+
move |(query_db, project_id, title, driver): &(QueriesStore, String, String, Drivers)| {
1617
let query_db_clone = *query_db;
1718
let project_id = project_id.clone();
1819
let title = title.clone();
20+
let driver = driver.clone();
1921
async move {
20-
query_db_clone.insert_query(&project_id, &title).await;
22+
query_db_clone
23+
.insert_query(&project_id, &title, &driver)
24+
.await;
2125
}
2226
},
2327
);
@@ -41,8 +45,10 @@ pub fn AddCustomQuery(show: RwSignal<bool>, project_id: String) -> impl IntoView
4145
class="px-4 py-2 border-1 border-neutral-200 hover:bg-neutral-200 rounded-md"
4246
on:click={
4347
let project_id = project_id.clone();
48+
let driver = driver.clone();
4449
move |_| {
45-
insert_query.dispatch((query_store, project_id.to_string(), title()));
50+
insert_query
51+
.dispatch((query_store, project_id.to_string(), title(), driver));
4652
show.set(false);
4753
}
4854
}

src/store/projects.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::collections::BTreeMap;
22

3+
use common::enums::Drivers;
34
use leptos::{RwSignal, SignalGet, SignalSet};
45
use tauri_sys::tauri::invoke;
56

@@ -24,6 +25,21 @@ impl ProjectsStore {
2425
self.0.get().get(project_id).cloned()
2526
}
2627

28+
pub fn select_driver_by_project(&self, project_id: Option<&str>) -> Drivers {
29+
if project_id.is_none() {
30+
return Drivers::PGSQL;
31+
}
32+
33+
let project = self.select_project_by_name(project_id.unwrap()).unwrap();
34+
let driver = project.split(':').next().unwrap();
35+
let driver = driver.split('=').last();
36+
37+
match driver {
38+
Some("PGSQL") => Drivers::PGSQL,
39+
_ => unreachable!(),
40+
}
41+
}
42+
2743
pub async fn load_projects(&self) {
2844
let projects = invoke::<_, BTreeMap<String, String>>(Invoke::ProjectDbSelect.as_ref(), &())
2945
.await

src/store/queries.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::collections::BTreeMap;
22

3+
use common::enums::Drivers;
34
use leptos::*;
45
use tauri_sys::tauri::invoke;
56

@@ -31,13 +32,13 @@ impl QueriesStore {
3132
});
3233
}
3334

34-
pub async fn insert_query(&self, project_id: &str, title: &str) {
35+
pub async fn insert_query(&self, project_id: &str, title: &str, driver: &Drivers) {
3536
let tabs_store = expect_context::<TabsStore>();
3637
let sql = tabs_store.select_active_editor_value();
3738
let _ = invoke::<_, ()>(
3839
Invoke::QueryDbInsert.as_ref(),
3940
&InvokeQueryDbInsertArgs {
40-
query_id: &format!("{}:{}", project_id, title),
41+
query_id: &format!("{}:{}:{}", project_id, driver, title),
4142
sql: &sql,
4243
},
4344
)

0 commit comments

Comments
 (0)