Skip to content

Commit d30b9ed

Browse files
committed
refactor: finalize query store api
1 parent 883f2a6 commit d30b9ed

File tree

11 files changed

+85
-97
lines changed

11 files changed

+85
-97
lines changed

src-tauri/src/dbs/query.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,20 @@ pub async fn query_db_select(app_state: State<'_, AppState>) -> Result<BTreeMap<
2020
}
2121

2222
#[tauri::command(rename_all = "snake_case")]
23-
pub async fn query_db_insert(key: &str, sql: &str, app: AppHandle) -> Result<()> {
23+
pub async fn query_db_insert(query_id: &str, sql: &str, app: AppHandle) -> Result<()> {
2424
let app_state = app.state::<AppState>();
2525
let db = app_state.query_db.lock().await;
2626
if let Some(ref db_instance) = *db {
27-
db_instance.insert(key, sql).unwrap();
27+
db_instance.insert(query_id, sql).unwrap();
2828
}
2929
Ok(())
3030
}
3131

3232
#[tauri::command(rename_all = "snake_case")]
33-
pub async fn query_db_delete(key: &str, app_state: State<'_, AppState>) -> Result<()> {
33+
pub async fn query_db_delete(query_id: &str, app_state: State<'_, AppState>) -> Result<()> {
3434
let query_db = app_state.query_db.lock().await;
3535
if let Some(ref query_db) = *query_db {
36-
query_db.remove(key).unwrap();
36+
query_db.remove(query_id).unwrap();
3737
};
3838
Ok(())
3939
}

src/app.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
store::{
1313
atoms::{QueryPerformanceAtom, QueryPerformanceContext, RunQueryAtom, RunQueryContext},
1414
projects::ProjectsStore,
15-
query::QueryStore,
15+
queries::QueriesStore,
1616
tabs::TabsStore,
1717
},
1818
};
@@ -22,8 +22,8 @@ use crate::{
2222

2323
#[component]
2424
pub fn App() -> impl IntoView {
25-
provide_context(QueryStore::default());
2625
provide_context(ProjectsStore::default());
26+
provide_context(QueriesStore::default());
2727
provide_context(RwSignal::new(QueryTableLayout::Grid));
2828
provide_context::<QueryPerformanceContext>(
2929
RwSignal::new(VecDeque::<QueryPerformanceAtom>::new()),

src/dashboard/query_editor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub fn QueryEditor(index: usize) -> impl IntoView {
8484

8585
view! {
8686
<div _ref=node_ref class="border-b-1 border-neutral-200 h-72 sticky">
87-
// <AddCustomQuery show=show/>
87+
<AddCustomQuery show=show/>
8888
<div class="absolute bottom-0 items-center text-xs flex justify-between px-4 left-0 w-full h-10 bg-gray-50">
8989
<Show when=move || active_project().is_some() fallback=|| view! { <div></div> }>
9090
<div class="appearance-auto py-1 px-2 border-1 border-neutral-200 bg-white hover:bg-neutral-200 rounded-md">

src/invoke.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,13 @@ pub struct InvokeProjectDbDeleteArgs<'a> {
9494
}
9595

9696
#[derive(Serialize, Deserialize)]
97-
pub struct InvokeInsertQueryArgs<'a> {
98-
pub key: &'a str,
97+
pub struct InvokeQueryDbInsertArgs<'a> {
98+
pub query_id: &'a str,
9999
pub sql: &'a str,
100100
}
101101

102102
#[derive(Serialize, Deserialize)]
103-
pub struct InvokeSelectQueriesArgs;
104-
105-
#[derive(Serialize, Deserialize)]
106-
pub struct InvokeDeleteQueryArgs<'a> {
107-
pub key: &'a str,
103+
pub struct InvokeQueryDbDeleteArgs<'a> {
104+
pub query_id: &'a str,
108105
}
109106

src/modals/add_custom_query.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use leptos::*;
22
use thaw::{Modal, ModalFooter};
33

4-
use crate::store::{projects::ProjectsStore, query::QueryStore};
4+
use crate::store::{projects::ProjectsStore, queries::QueriesStore};
55

66
#[component]
77
pub fn AddCustomQuery(show: RwSignal<bool>) -> impl IntoView {
88
let projects_store = expect_context::<ProjectsStore>();
9-
let query_store = expect_context::<QueryStore>();
9+
let query_store = expect_context::<QueriesStore>();
1010
let (query_title, set_query_title) = create_signal(String::new());
1111
//let projects = create_memo(move |_| projects_store.get_projects().unwrap());
1212

@@ -18,15 +18,12 @@ pub fn AddCustomQuery(show: RwSignal<bool>) -> impl IntoView {
1818
// });
1919

2020
let insert_query = create_action(
21-
move |(query_db, key, project_name): &(QueryStore, String, String)| {
21+
move |(query_db, key, project_name): &(QueriesStore, String, String)| {
2222
let query_db_clone = *query_db;
2323
let key = key.clone();
2424
let project_name = project_name.clone();
2525
async move {
26-
query_db_clone
27-
.insert_query(&key, &project_name)
28-
.await
29-
.unwrap();
26+
query_db_clone.insert_query(&key, &project_name).await;
3027
}
3128
},
3229
);

src/sidebar/index.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn Sidebar() -> impl IntoView {
1818
show.set(false);
1919
}
2020
});
21-
create_resource(
21+
let _ = create_resource(
2222
|| {},
2323
move |_| async move {
2424
projects_store.load_projects().await;

src/sidebar/queries.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
use crate::store::query::QueryStore;
1+
use crate::store::queries::QueriesStore;
22
use leptos::*;
33

44
use super::query::Query;
55

66
#[component]
77
pub fn Queries() -> impl IntoView {
8-
let query_state = expect_context::<QueryStore>();
9-
let queries = create_resource(
10-
move || query_state.0.get(),
11-
move |_| async move { query_state.select_queries().await.unwrap() },
8+
let queries_store = expect_context::<QueriesStore>();
9+
let _ = create_resource(
10+
move || queries_store.0.get(),
11+
move |_| async move {
12+
queries_store.load_queries().await;
13+
},
1214
);
1315

1416
view! {
1517
<For
16-
each=move || queries.get().unwrap_or_default()
18+
each=move || queries_store.0.get()
1719
key=|(key, _)| key.clone()
1820
children=move |(key, _)| view! { <Query key=key/> }
1921
/>

src/sidebar/query.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use leptos::*;
22
use leptos_icons::*;
33

4-
use crate::store::{query::QueryStore, tabs::TabsStore};
4+
use crate::store::{queries::QueriesStore, tabs::TabsStore};
55

66
#[component]
77
pub fn Query(key: String) -> impl IntoView {
8-
let query_store = expect_context::<QueryStore>();
8+
let query_store = expect_context::<QueriesStore>();
99
let tabs_store = expect_context::<TabsStore>();
1010
let key_clone = key.clone();
1111
let splitted_key = create_memo(move |_| {
@@ -41,7 +41,7 @@ pub fn Query(key: String) -> impl IntoView {
4141
move |_| {
4242
let key = key.clone();
4343
spawn_local(async move {
44-
query_store.delete_query(&key).await.unwrap();
44+
query_store.delete_query(&key).await;
4545
})
4646
}
4747
}

src/store/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pub mod atoms;
22
pub mod projects;
3-
pub mod query;
3+
pub mod queries;
44
pub mod tabs;
55

src/store/queries.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use std::collections::BTreeMap;
2+
3+
use leptos::*;
4+
use tauri_sys::tauri::invoke;
5+
6+
use crate::invoke::{Invoke, InvokeQueryDbDeleteArgs, InvokeQueryDbInsertArgs};
7+
8+
use super::tabs::TabsStore;
9+
10+
#[derive(Clone, Copy, Debug)]
11+
pub struct QueriesStore(pub RwSignal<BTreeMap<String, String>>);
12+
13+
impl Default for QueriesStore {
14+
fn default() -> Self {
15+
Self::new()
16+
}
17+
}
18+
19+
impl QueriesStore {
20+
#[must_use]
21+
pub fn new() -> Self {
22+
Self(create_rw_signal(BTreeMap::new()))
23+
}
24+
25+
pub async fn load_queries(&self) {
26+
let saved_queries = invoke::<_, BTreeMap<String, String>>(Invoke::QueryDbSelect.as_ref(), &())
27+
.await
28+
.unwrap();
29+
self.0.update(|prev| {
30+
*prev = saved_queries.into_iter().collect();
31+
});
32+
}
33+
34+
pub async fn insert_query(&self, project_id: &str, title: &str) {
35+
let tabs_store = expect_context::<TabsStore>();
36+
let sql = tabs_store.select_active_editor_value();
37+
let _ = invoke::<_, ()>(
38+
Invoke::QueryDbInsert.as_ref(),
39+
&InvokeQueryDbInsertArgs {
40+
query_id: &format!("{}:{}", project_id, title),
41+
sql: &sql,
42+
},
43+
)
44+
.await;
45+
self.load_queries().await;
46+
}
47+
48+
pub async fn delete_query(&self, query_id: &str) {
49+
let _ = invoke::<_, ()>(
50+
Invoke::QueryDbDelete.as_ref(),
51+
&InvokeQueryDbDeleteArgs { query_id },
52+
)
53+
.await;
54+
self.load_queries().await;
55+
}
56+
}
57+

0 commit comments

Comments
 (0)