1
- use std:: { cell:: RefCell , collections :: BTreeMap , rc:: Rc } ;
1
+ use std:: { cell:: RefCell , rc:: Rc } ;
2
2
3
3
use leptos:: {
4
4
create_rw_signal, error:: Result , use_context, RwSignal , SignalGet , SignalGetUntracked , SignalSet ,
@@ -27,9 +27,9 @@ struct QueryInfo {
27
27
pub struct TabsStore {
28
28
pub active_tabs : RwSignal < usize > ,
29
29
pub selected_tab : RwSignal < String > ,
30
- pub editors : RwSignal < BTreeMap < String , ModelCell > > ,
30
+ pub editors : RwSignal < Vec < ModelCell > > ,
31
31
#[ 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 > > ) > > ,
33
33
pub is_loading : RwSignal < bool > ,
34
34
}
35
35
@@ -47,8 +47,8 @@ impl TabsStore {
47
47
Self {
48
48
active_tabs : create_rw_signal ( 1 ) ,
49
49
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 ( ) ) ,
52
52
is_loading : create_rw_signal ( false ) ,
53
53
}
54
54
}
@@ -80,7 +80,11 @@ impl TabsStore {
80
80
)
81
81
. await ?;
82
82
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
+ }
84
88
} ) ;
85
89
self . is_loading . set ( false ) ;
86
90
Ok ( ( ) )
@@ -101,28 +105,31 @@ impl TabsStore {
101
105
self
102
106
. sql_results
103
107
. get ( )
104
- . get ( & self . selected_tab . get ( ) )
108
+ . get ( self . convert_selected_tab_to_index ( ) )
105
109
. cloned ( )
106
110
}
107
111
108
112
pub fn add_editor ( & mut self , editor : Rc < RefCell < Option < CodeEditor > > > ) {
109
113
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 ( ) ) ) ;
111
118
} ) ;
112
119
}
113
120
114
121
#[ allow( dead_code) ]
115
- pub fn remove_editor ( & mut self , tab_key : & str ) {
122
+ pub fn remove_editor ( & mut self , index : usize ) {
116
123
self . editors . update ( |prev| {
117
- prev. remove ( tab_key ) ;
124
+ prev. remove ( index ) ;
118
125
} ) ;
119
126
}
120
127
121
128
pub fn select_active_editor ( & self ) -> ModelCell {
122
129
self
123
130
. editors
124
131
. get_untracked ( )
125
- . get ( & self . selected_tab . get_untracked ( ) )
132
+ . get ( self . convert_selected_tab_to_index ( ) )
126
133
. unwrap ( )
127
134
. clone ( )
128
135
}
@@ -131,7 +138,7 @@ impl TabsStore {
131
138
self
132
139
. editors
133
140
. get_untracked ( )
134
- . get ( & self . selected_tab . get_untracked ( ) )
141
+ . get ( self . convert_selected_tab_to_index ( ) )
135
142
. unwrap ( )
136
143
. borrow ( )
137
144
. as_ref ( )
@@ -145,7 +152,7 @@ impl TabsStore {
145
152
self
146
153
. editors
147
154
. get_untracked ( )
148
- . get ( & self . selected_tab . get_untracked ( ) )
155
+ . get ( self . convert_selected_tab_to_index ( ) )
149
156
. unwrap ( )
150
157
. borrow ( )
151
158
. as_ref ( )
@@ -155,6 +162,10 @@ impl TabsStore {
155
162
. set_value ( value) ;
156
163
}
157
164
165
+ pub ( self ) fn convert_selected_tab_to_index ( & self ) -> usize {
166
+ self . selected_tab . get ( ) . parse :: < usize > ( ) . unwrap ( )
167
+ }
168
+
158
169
// TODO: improve this
159
170
pub ( self ) fn find_query_for_line ( & self , queries : & str , line_number : f64 ) -> Option < QueryInfo > {
160
171
let mut start_line = 1f64 ;
0 commit comments