@@ -16,7 +16,7 @@ define([
1616 'vp_base/js/com/component/Component' ,
1717 'vp_base/js/com/component/SuggestInput' ,
1818 'vp_base/js/com/component/MultiSelector'
19- ] , function ( dataHTML , dataCss , com_String , com_util , Component , MultiSelector ) {
19+ ] , function ( dataHTML , dataCss , com_String , com_util , Component , SuggestInput , MultiSelector ) {
2020 //========================================================================
2121 // [CLASS] DataSelector
2222 //========================================================================
@@ -42,6 +42,8 @@ define([
4242 ...this . state
4343 }
4444
45+ this . columnSelector = null ;
46+
4547 }
4648
4749 _bindEvent ( ) {
@@ -52,17 +54,21 @@ define([
5254 that . close ( ) ;
5355 } ) ;
5456
57+ // Click cancel
58+ $ ( that . wrapSelector ( '#vp_dsCancel' ) ) . on ( 'click' , function ( ) {
59+ that . close ( ) ;
60+ } ) ;
61+
5562 // Click ok
5663 $ ( that . wrapSelector ( '#vp_dsOk' ) ) . on ( 'click' , function ( ) {
5764 // TODO: set target value
58- let newValue = that . state . data ;
65+ let newValue = that . generateCode ( ) ;
5966
6067 $ ( that . state . target ) . val ( newValue ) ;
6168 $ ( that . state . target ) . data ( 'type' , that . state . dataType ) ;
6269 that . state . finish ( newValue ) ;
6370 that . close ( ) ;
6471 } ) ;
65-
6672 }
6773
6874 /**
@@ -73,7 +79,9 @@ define([
7379
7480 // Click variable item
7581 $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . off ( 'click' ) ;
76- $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . on ( 'click' , function ( ) {
82+ // $(that.wrapSelector('.vp-ds-var-item')).on('click', function() {
83+ $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . single_double_click ( function ( evt ) {
84+ // single click
7785 $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . removeClass ( 'selected' ) ;
7886 $ ( this ) . addClass ( 'selected' ) ;
7987
@@ -82,7 +90,21 @@ define([
8290 that . state . data = data ;
8391 that . state . dataType = dataType ;
8492
85- // TODO: load preview
93+ // render option page
94+ that . renderOptionPage ( ) ;
95+ } , function ( evt ) {
96+ // double click to select directly
97+ let data = $ ( this ) . find ( '.vp-ds-var-data' ) . text ( ) ;
98+ let dataType = $ ( this ) . find ( '.vp-ds-var-type' ) . text ( ) ;
99+ that . state . data = data ;
100+ that . state . dataType = dataType ;
101+
102+ let newValue = that . generateCode ( ) ;
103+
104+ $ ( that . state . target ) . val ( newValue ) ;
105+ $ ( that . state . target ) . data ( 'type' , that . state . dataType ) ;
106+ that . state . finish ( newValue ) ;
107+ that . close ( ) ;
86108 } ) ;
87109 }
88110
@@ -117,19 +139,91 @@ define([
117139 return dataHTML ;
118140 }
119141
142+ templateForSlicing ( ) {
143+ return `
144+ <div>
145+ <label>Type start/end index for slicing.</label>
146+ </div>
147+ <div>
148+ <input type="number" class="vp-input" id="vp_dsStart" placeholder="Start value"/>
149+ <input type="number" class="vp-input" id="vp_dsEnd" placeholder="End value"/>
150+ </div>
151+ ` ;
152+ }
153+
120154 render ( ) {
121155 super . render ( ) ;
122156
123157 this . loadVariables ( ) ;
124158 }
125159
160+ renderOptionPage ( ) {
161+ // initialize page and variables
162+ $ ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ) . html ( '' ) ;
163+ this . columnSelector = null ;
164+
165+ switch ( this . state . dataType ) {
166+ case 'DataFrame' :
167+ // column selecting
168+ this . columnSelector = new MultiSelector ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ,
169+ { mode : 'columns' , parent : [ this . state . data ] }
170+ ) ;
171+ break ;
172+ case 'Series' :
173+ case 'list' :
174+ case 'ndarray' :
175+ // slicing
176+ $ ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ) . html ( this . templateForSlicing ( ) ) ;
177+ break ;
178+ default :
179+ break ;
180+ }
181+ }
182+
183+ generateCode ( ) {
184+ let { data, dataType } = this . state ;
185+ let code = new com_String ( ) ;
186+
187+ switch ( dataType ) {
188+ case 'DataFrame' :
189+ code . append ( data ) ;
190+ if ( this . columnSelector != null ) {
191+ let result = this . columnSelector . getDataList ( ) ;
192+ let columnList = [ ] ;
193+ result && result . forEach ( obj => {
194+ columnList . push ( obj . code ) ;
195+ } ) ;
196+ if ( columnList . length > 0 ) {
197+ code . appendFormat ( '[{0}]' , columnList . join ( ', ' ) ) ;
198+ }
199+ }
200+ break ;
201+ case 'Series' :
202+ case 'list' :
203+ case 'ndarray' :
204+ code . append ( data ) ;
205+ // start / end value
206+ let start = $ ( this . wrapSelector ( '#vp_dsStart' ) ) . val ( ) ;
207+ let end = $ ( this . wrapSelector ( '#vp_dsEnd' ) ) . val ( ) ;
208+ if ( ( start && start != '' ) || ( end && end != '' ) ) {
209+ code . appendFormat ( '[{0}:{1}]' , start , end ) ;
210+ }
211+ break ;
212+ default :
213+ code . append ( data ) ;
214+ break ;
215+ }
216+ return code . toString ( ) ;
217+ }
218+
126219 open ( ) {
127220 $ ( this . wrapSelector ( ) ) . show ( ) ;
128221 }
129222
130223 close ( ) {
131224 $ ( this . wrapSelector ( ) ) . remove ( ) ;
132225 }
226+
133227 }
134228
135229 return DataSelector ;
0 commit comments