1
- use std:: { cell:: RefCell , rc:: Rc } ;
1
+ use std:: { cell:: RefCell , rc:: Rc , sync :: Arc } ;
2
2
3
+ use futures:: lock:: Mutex ;
3
4
use leptos:: { html:: * , * } ;
4
5
use leptos_use:: { use_document, use_event_listener} ;
5
6
use monaco:: {
@@ -8,35 +9,21 @@ use monaco::{
8
9
} ;
9
10
use wasm_bindgen:: { closure:: Closure , JsCast } ;
10
11
11
- use crate :: {
12
- modals,
13
- store:: { editor:: EditorStore , query:: QueryStore } ,
14
- } ;
12
+ use crate :: { modals, store:: tabs:: TabsStore } ;
15
13
16
14
pub type ModelCell = Rc < RefCell < Option < CodeEditor > > > ;
17
15
18
16
pub fn component ( ) -> impl IntoView {
19
- let query_store = use_context :: < QueryStore > ( ) . unwrap ( ) ;
20
- let run_query = create_action ( move |query_store : & QueryStore | {
21
- let query_store = * query_store;
22
- async move {
23
- query_store. run_query ( ) . await . unwrap ( ) ;
24
- }
25
- } ) ;
17
+ let tabs_store = Rc :: new ( RefCell :: new ( use_context :: < TabsStore > ( ) . unwrap ( ) ) ) ;
26
18
let show = create_rw_signal ( false ) ;
27
19
let _ = use_event_listener ( use_document ( ) , ev:: keydown, move |event| {
28
20
if event. key ( ) == "Escape" {
29
21
show. set ( false ) ;
30
22
}
31
23
} ) ;
32
- let mut editors = use_context :: < EditorStore > ( ) . unwrap ( ) ;
33
24
let node_ref = create_node_ref ( ) ;
34
- let _ = use_event_listener ( node_ref, ev:: keydown, move |event| {
35
- if event. key ( ) == "Enter" && event. ctrl_key ( ) {
36
- run_query. dispatch ( query_store) ;
37
- }
38
- } ) ;
39
25
26
+ let tabs_store_clone = tabs_store. clone ( ) ;
40
27
node_ref. on_load ( move |node| {
41
28
let div_element: & web_sys:: HtmlDivElement = & node;
42
29
let html_element = div_element. unchecked_ref :: < web_sys:: HtmlElement > ( ) ;
@@ -61,7 +48,20 @@ pub fn component() -> impl IntoView {
61
48
62
49
// TODO: Fix this
63
50
let e = Rc :: new ( RefCell :: new ( Some ( e) ) ) ;
64
- editors. add_editor ( e) ;
51
+ tabs_store_clone. borrow_mut ( ) . add_editor ( e) ;
52
+ } ) ;
53
+ let tabs_store = Arc :: new ( Mutex :: new ( use_context :: < TabsStore > ( ) . unwrap ( ) ) ) ;
54
+ let run_query = create_action ( move |tabs_store : & Arc < Mutex < TabsStore > > | {
55
+ let tabs_store = tabs_store. clone ( ) ;
56
+ async move {
57
+ tabs_store. lock ( ) . await . run_query ( ) . await . unwrap ( ) ;
58
+ }
59
+ } ) ;
60
+ let tabs_store_clone = tabs_store. clone ( ) ;
61
+ let _ = use_event_listener ( node_ref, ev:: keydown, move |event| {
62
+ if event. key ( ) == "Enter" && event. ctrl_key ( ) {
63
+ run_query. dispatch ( tabs_store_clone. clone ( ) ) ;
64
+ }
65
65
} ) ;
66
66
67
67
div ( )
@@ -85,7 +85,7 @@ pub fn component() -> impl IntoView {
85
85
. child (
86
86
button ( )
87
87
. classes ( "p-1 border-1 border-neutral-200 bg-white hover:bg-neutral-200 rounded-md" )
88
- . on ( ev:: click, move |_| run_query. dispatch ( query_store ) )
88
+ . on ( ev:: click, move |_| run_query. dispatch ( tabs_store . clone ( ) ) )
89
89
. child ( "Query" ) ,
90
90
) ,
91
91
) ,
0 commit comments