1- use std:: { cell:: RefCell , rc:: Rc } ;
1+ use std:: { cell:: RefCell , rc:: Rc , sync :: Arc } ;
22
3+ use futures:: lock:: Mutex ;
34use leptos:: { html:: * , * } ;
45use leptos_use:: { use_document, use_event_listener} ;
56use monaco:: {
@@ -8,35 +9,21 @@ use monaco::{
89} ;
910use wasm_bindgen:: { closure:: Closure , JsCast } ;
1011
11- use crate :: {
12- modals,
13- store:: { editor:: EditorStore , query:: QueryStore } ,
14- } ;
12+ use crate :: { modals, store:: tabs:: TabsStore } ;
1513
1614pub type ModelCell = Rc < RefCell < Option < CodeEditor > > > ;
1715
1816pub 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 ( ) ) ) ;
2618 let show = create_rw_signal ( false ) ;
2719 let _ = use_event_listener ( use_document ( ) , ev:: keydown, move |event| {
2820 if event. key ( ) == "Escape" {
2921 show. set ( false ) ;
3022 }
3123 } ) ;
32- let mut editors = use_context :: < EditorStore > ( ) . unwrap ( ) ;
3324 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- } ) ;
3925
26+ let tabs_store_clone = tabs_store. clone ( ) ;
4027 node_ref. on_load ( move |node| {
4128 let div_element: & web_sys:: HtmlDivElement = & node;
4229 let html_element = div_element. unchecked_ref :: < web_sys:: HtmlElement > ( ) ;
@@ -61,7 +48,20 @@ pub fn component() -> impl IntoView {
6148
6249 // TODO: Fix this
6350 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+ }
6565 } ) ;
6666
6767 div ( )
@@ -85,7 +85,7 @@ pub fn component() -> impl IntoView {
8585 . child (
8686 button ( )
8787 . 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 ( ) ) )
8989 . child ( "Query" ) ,
9090 ) ,
9191 ) ,
0 commit comments