1- use std:: { cell:: RefCell , collections :: BTreeMap , rc:: Rc } ;
1+ use std:: { cell:: RefCell , rc:: Rc } ;
22
33use leptos:: {
44 create_rw_signal, error:: Result , use_context, RwSignal , SignalGet , SignalGetUntracked , SignalSet ,
@@ -27,9 +27,9 @@ struct QueryInfo {
2727pub struct TabsStore {
2828 pub active_tabs : RwSignal < usize > ,
2929 pub selected_tab : RwSignal < String > ,
30- pub editors : RwSignal < BTreeMap < String , ModelCell > > ,
30+ pub editors : RwSignal < Vec < ModelCell > > ,
3131 #[ allow( clippy:: type_complexity) ]
32- pub sql_results : RwSignal < BTreeMap < String , ( Vec < String > , Vec < Vec < String > > ) > > ,
32+ pub sql_results : RwSignal < Vec < ( Vec < String > , Vec < Vec < String > > ) > > ,
3333 pub is_loading : RwSignal < bool > ,
3434}
3535
@@ -47,8 +47,8 @@ impl TabsStore {
4747 Self {
4848 active_tabs : create_rw_signal ( 1 ) ,
4949 selected_tab : create_rw_signal ( String :: from ( "0" ) ) ,
50- editors : create_rw_signal ( BTreeMap :: new ( ) ) ,
51- sql_results : create_rw_signal ( BTreeMap :: new ( ) ) ,
50+ editors : create_rw_signal ( Vec :: new ( ) ) ,
51+ sql_results : create_rw_signal ( Vec :: new ( ) ) ,
5252 is_loading : create_rw_signal ( false ) ,
5353 }
5454 }
@@ -80,7 +80,11 @@ impl TabsStore {
8080 )
8181 . await ?;
8282 self . sql_results . update ( |prev| {
83- prev. insert ( self . selected_tab . get_untracked ( ) , data) ;
83+ let index = self . convert_selected_tab_to_index ( ) ;
84+ match prev. get_mut ( index) {
85+ Some ( sql_result) => * sql_result = data,
86+ None => prev. push ( data) ,
87+ }
8488 } ) ;
8589 self . is_loading . set ( false ) ;
8690 Ok ( ( ) )
@@ -101,28 +105,31 @@ impl TabsStore {
101105 self
102106 . sql_results
103107 . get ( )
104- . get ( & self . selected_tab . get ( ) )
108+ . get ( self . convert_selected_tab_to_index ( ) )
105109 . cloned ( )
106110 }
107111
108112 pub fn add_editor ( & mut self , editor : Rc < RefCell < Option < CodeEditor > > > ) {
109113 self . editors . update ( |prev| {
110- prev. insert ( ( self . active_tabs . get_untracked ( ) - 1 ) . to_string ( ) , editor) ;
114+ prev. push ( editor) ;
115+ } ) ;
116+ self . sql_results . update ( |prev| {
117+ prev. push ( ( Vec :: new ( ) , Vec :: new ( ) ) ) ;
111118 } ) ;
112119 }
113120
114121 #[ allow( dead_code) ]
115- pub fn remove_editor ( & mut self , tab_key : & str ) {
122+ pub fn remove_editor ( & mut self , index : usize ) {
116123 self . editors . update ( |prev| {
117- prev. remove ( tab_key ) ;
124+ prev. remove ( index ) ;
118125 } ) ;
119126 }
120127
121128 pub fn select_active_editor ( & self ) -> ModelCell {
122129 self
123130 . editors
124131 . get_untracked ( )
125- . get ( & self . selected_tab . get_untracked ( ) )
132+ . get ( self . convert_selected_tab_to_index ( ) )
126133 . unwrap ( )
127134 . clone ( )
128135 }
@@ -131,7 +138,7 @@ impl TabsStore {
131138 self
132139 . editors
133140 . get_untracked ( )
134- . get ( & self . selected_tab . get_untracked ( ) )
141+ . get ( self . convert_selected_tab_to_index ( ) )
135142 . unwrap ( )
136143 . borrow ( )
137144 . as_ref ( )
@@ -145,7 +152,7 @@ impl TabsStore {
145152 self
146153 . editors
147154 . get_untracked ( )
148- . get ( & self . selected_tab . get_untracked ( ) )
155+ . get ( self . convert_selected_tab_to_index ( ) )
149156 . unwrap ( )
150157 . borrow ( )
151158 . as_ref ( )
@@ -155,6 +162,10 @@ impl TabsStore {
155162 . set_value ( value) ;
156163 }
157164
165+ pub ( self ) fn convert_selected_tab_to_index ( & self ) -> usize {
166+ self . selected_tab . get ( ) . parse :: < usize > ( ) . unwrap ( )
167+ }
168+
158169 // TODO: improve this
159170 pub ( self ) fn find_query_for_line ( & self , queries : & str , line_number : f64 ) -> Option < QueryInfo > {
160171 let mut start_line = 1f64 ;
0 commit comments