Skip to content

Commit 9d12f23

Browse files
committed
refactor: query, editor and tabs state
1 parent cdefda1 commit 9d12f23

File tree

2 files changed

+68
-21
lines changed

2 files changed

+68
-21
lines changed

src/store/query.rs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@ use crate::invoke::{
1111
use super::{active_project::ActiveProjectStore, editor::EditorStore, projects::ProjectsStore};
1212

1313
#[derive(Clone, Copy, Debug)]
14-
pub struct QueryStore {
15-
#[allow(clippy::type_complexity)]
16-
pub sql_result: RwSignal<Option<(Vec<String>, Vec<Vec<String>>)>>,
17-
pub is_loading: RwSignal<bool>,
18-
pub saved_queries: RwSignal<BTreeMap<String, String>>,
19-
}
14+
pub struct QueryStore(RwSignal<BTreeMap<String, String>>);
2015

2116
impl Default for QueryStore {
2217
fn default() -> Self {
@@ -26,21 +21,14 @@ impl Default for QueryStore {
2621

2722
impl QueryStore {
2823
pub fn new() -> Self {
29-
Self {
30-
sql_result: create_rw_signal(None),
31-
is_loading: create_rw_signal(false),
32-
saved_queries: create_rw_signal(BTreeMap::new()),
33-
}
24+
Self(create_rw_signal(BTreeMap::new()))
3425
}
3526

3627
pub async fn run_query(&self) -> Result<()> {
3728
let active_project = use_context::<ActiveProjectStore>().unwrap();
3829
let active_project = active_project.0.get_untracked().unwrap();
3930
let projects_store = use_context::<ProjectsStore>().unwrap();
4031
projects_store.connect(&active_project).await?;
41-
self.is_loading.update(|prev| {
42-
*prev = true;
43-
});
4432
let editor_state = use_context::<EditorStore>().unwrap();
4533
let active_editor = editor_state.get_active_editor();
4634
let position: monaco::sys::Position = active_editor
@@ -64,9 +52,6 @@ impl QueryStore {
6452
)
6553
.await?;
6654
self.sql_result.set(Some(data));
67-
self.is_loading.update(|prev| {
68-
*prev = false;
69-
});
7055
Ok(())
7156
}
7257

@@ -77,10 +62,10 @@ impl QueryStore {
7762
)
7863
.await?;
7964

80-
self.saved_queries.update(|prev| {
65+
self.0.update(|prev| {
8166
*prev = saved_queries.into_iter().collect();
8267
});
83-
Ok(self.saved_queries.get_untracked().clone())
68+
Ok(self.0.get_untracked())
8469
}
8570

8671
pub async fn insert_query(&self, key: &str, project_name: &str) -> Result<()> {
@@ -112,7 +97,7 @@ impl QueryStore {
11297
let active_project = use_context::<ActiveProjectStore>().unwrap();
11398
let splitted_key = key.split(':').collect::<Vec<&str>>();
11499
active_project.0.set(Some(splitted_key[0].to_string()));
115-
let query = self.saved_queries.get_untracked().get(key).unwrap().clone();
100+
let query = self.0.get_untracked().get(key).unwrap().clone();
116101
let editor_state = use_context::<EditorStore>().unwrap();
117102
editor_state.set_editor_value(&query);
118103
Ok(())

src/store/tabs.rs

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1-
use leptos::{create_rw_signal, RwSignal};
1+
use std::{
2+
cell::RefCell,
3+
collections::{BTreeMap, HashMap},
4+
rc::Rc,
5+
};
6+
7+
use leptos::{create_rw_signal, RwSignal, SignalGetUntracked, SignalUpdate};
8+
use monaco::api::CodeEditor;
9+
10+
use crate::query_editor::ModelCell;
211

312
#[derive(Clone, Debug)]
413
pub struct Tabs {
514
pub active_tabs: RwSignal<usize>,
615
pub selected_tab: RwSignal<String>,
16+
pub editors: RwSignal<BTreeMap<String, ModelCell>>,
17+
pub sql_results: RwSignal<Vec<RwSignal<Option<(usize, Vec<String>, Vec<Vec<String>>)>>>>,
718
}
819

920
impl Default for Tabs {
@@ -17,6 +28,57 @@ impl Tabs {
1728
Self {
1829
active_tabs: create_rw_signal(1),
1930
selected_tab: create_rw_signal(String::from("0")),
31+
editors: create_rw_signal(BTreeMap::new()),
32+
sql_results: create_rw_signal(Vec::new()),
2033
}
2134
}
35+
36+
pub fn add_editor(&mut self, tab_key: &str, editor: Rc<RefCell<Option<CodeEditor>>>) {
37+
self.editors.update(|prev| {
38+
prev.insert(tab_key.to_string(), editor);
39+
});
40+
}
41+
42+
pub fn remove_editor(&mut self, tab_key: &str) {
43+
self.editors.update(|prev| {
44+
prev.remove(tab_key);
45+
});
46+
}
47+
48+
pub fn get_active_editor(&self) -> ModelCell {
49+
self
50+
.editors
51+
.get_untracked()
52+
.get(&self.selected_tab.get_untracked())
53+
.unwrap()
54+
.clone()
55+
}
56+
57+
pub fn get_editor_value(&self) -> String {
58+
self
59+
.editors
60+
.get_untracked()
61+
.get(&self.selected_tab.get_untracked())
62+
.unwrap()
63+
.borrow()
64+
.as_ref()
65+
.unwrap()
66+
.get_model()
67+
.unwrap()
68+
.get_value()
69+
}
70+
71+
pub fn set_editor_value(&self, value: &str) {
72+
self
73+
.editors
74+
.get_untracked()
75+
.get(&self.selected_tab.get_untracked())
76+
.unwrap()
77+
.borrow()
78+
.as_ref()
79+
.unwrap()
80+
.get_model()
81+
.unwrap()
82+
.set_value(value);
83+
}
2284
}

0 commit comments

Comments
 (0)