@@ -24,11 +24,20 @@ define([
2424 */
2525 var vp_showInterfaceOnPage = function ( selector , package ) {
2626
27+ let autoCols = { } ;
28+
2729 // generate input variable tag
2830 var tblInput = $ ( selector + ' #vp_inputOutputBox table tbody' ) ;
2931 package . input && package . input . forEach ( function ( o , i ) {
3032 var obj = JSON . parse ( JSON . stringify ( o ) ) ;
3133 tblInput . append ( vp_createTag ( selector , obj , true , ( obj . required == false ? false : true ) ) ) ;
34+ if ( obj . component === 'col_select' ) {
35+ if ( autoCols [ obj . target ] != undefined ) {
36+ autoCols [ obj . target ] . push ( obj . name ) ;
37+ } else {
38+ autoCols [ obj . target ] = [ obj . name ] ;
39+ }
40+ }
3241 } ) ;
3342
3443 // generate option variable tag
@@ -37,13 +46,38 @@ define([
3746 // cell metadata test
3847 var obj = JSON . parse ( JSON . stringify ( o ) ) ; // deep copy
3948 tblOption . append ( vp_createTag ( selector , obj , true , ( obj . required == true ) ) ) ;
49+ if ( obj . component === 'col_select' ) {
50+ if ( autoCols [ obj . target ] != undefined ) {
51+ autoCols [ obj . target ] . push ( obj . name ) ;
52+ } else {
53+ autoCols [ obj . target ] = [ obj . name ] ;
54+ }
55+ }
4056 } ) ;
4157
4258 // generate output variable tag
4359 var tblOutput = $ ( selector + ' #vp_inputOutputBox table tbody' ) ;
4460 package . output && package . output . forEach ( function ( o , i ) {
4561 var obj = JSON . parse ( JSON . stringify ( o ) ) ; // deep copy
4662 tblOutput . append ( vp_createTag ( selector , obj , true , ( obj . required == true ) ) ) ;
63+ if ( obj . component === 'col_select' ) {
64+ if ( autoCols [ obj . target ] != undefined ) {
65+ autoCols [ obj . target ] . push ( obj . name ) ;
66+ } else {
67+ autoCols [ obj . target ] = [ obj . name ] ;
68+ }
69+ }
70+ } ) ;
71+
72+ // bind column list FIXME: change event not triggered on changing df input
73+ Object . keys ( autoCols ) . forEach ( target => {
74+ let targetSelector = selector + ' #' + target ;
75+ vp_bindColumnSource ( selector , targetSelector , autoCols [ target ] ) ;
76+ // on change event
77+ $ ( targetSelector ) . on ( 'change' , function ( ) {
78+ console . log ( 'change event ' , selector , targetSelector , autoCols [ target ] ) ;
79+ vp_bindColumnSource ( selector , this , autoCols [ target ] ) ;
80+ } ) ;
4781 } ) ;
4882 }
4983
@@ -135,6 +169,15 @@ define([
135169 vp_generateVarSelect ( tag , obj . var_type , obj . value ) ;
136170 tblInput . appendChild ( tag ) ;
137171 break ;
172+ case 'col_select' :
173+ var tag = document . createElement ( 'input' ) ;
174+ $ ( tag ) . attr ( {
175+ 'type' : 'text' ,
176+ 'id' : obj . name ,
177+ 'class' : 'vp-input vp-state'
178+ } ) ;
179+ tblInput . appendChild ( tag ) ;
180+ break ;
138181 case 'textarea' :
139182 var textarea = $ ( `<textarea id="${ obj . name } " class="vp-textarea vp-state">${ ( obj . default == undefined ?'' :obj . default ) } </textarea>` ) ;
140183 // cell metadata test
@@ -209,7 +252,7 @@ define([
209252 suggestInput . setSelectEvent ( function ( selectedValue ) {
210253 // trigger change
211254 $ ( divTag + ' #' + obj . name ) . val ( selectedValue ) ;
212- $ ( divTag + ' #' + obj . name ) . trigger ( 'select_suggestvalue ' ) ;
255+ $ ( divTag + ' #' + obj . name ) . trigger ( 'change ' ) ;
213256 } ) ;
214257 $ ( divTag + ' #' + obj . name ) . replaceWith ( function ( ) {
215258 return suggestInput . toTagString ( ) ;
@@ -320,6 +363,9 @@ define([
320363 case 'var_multi' :
321364 value = $ ( vp_wrapSelector ( pageId , '#' + obj . name ) ) . val ( ) ;
322365 break ;
366+ case 'col_select' :
367+ value = $ ( vp_wrapSelector ( pageId , '#' + obj . name ) ) . val ( ) ;
368+ break ;
323369 case 'table' :
324370 case 'file' :
325371 default :
@@ -424,26 +470,28 @@ define([
424470
425471 /**
426472 * Bind columns source function
427- * @param {object } pageThis
473+ * @param {string } selector thisWrapSelector
428474 * @param {object } target
429475 * @param {array } columnInputIdList
430476 * Usage :
431477 * $(document).on('change', this.wrapSelector('#dataframe_tag_id'), function() {
432- * pdGen.vp_bindColumnSource(that, this, ['column_input_id']);
478+ * pdGen.vp_bindColumnSource(that.wrapSelector() , this, ['column_input_id']);
433479 * });
434480 */
435- var vp_bindColumnSource = function ( pageThis , target , columnInputIdList ) {
436- var varName = $ ( target ) . val ( ) ;
437-
481+ var vp_bindColumnSource = function ( selector , target , columnInputIdList ) {
482+ var varName = '' ;
483+ if ( $ ( target ) . length > 0 ) {
484+ varName = $ ( target ) . val ( ) ;
485+ }
438486 if ( varName === '' ) {
439487 // reset with no source
440488 columnInputIdList && columnInputIdList . forEach ( columnInputId => {
441489 var suggestInputX = new SuggestInput ( ) ;
442490 suggestInputX . setComponentID ( columnInputId ) ;
443- suggestInputX . addClass ( 'vp-input' ) ;
491+ suggestInputX . addClass ( 'vp-input vp-state ' ) ;
444492 suggestInputX . setNormalFilter ( false ) ;
445- suggestInputX . setValue ( $ ( pageThis . wrapSelector ( ' #' + columnInputId ) ) . val ( ) ) ;
446- $ ( pageThis . wrapSelector ( ' #' + columnInputId ) ) . replaceWith ( function ( ) {
493+ suggestInputX . setValue ( $ ( selector + ' #' + columnInputId ) . val ( ) ) ;
494+ $ ( selector + ' #' + columnInputId ) . replaceWith ( function ( ) {
447495 return suggestInputX . toTagString ( ) ;
448496 } ) ;
449497 } ) ;
@@ -454,22 +502,20 @@ define([
454502 try {
455503 let { result, type, msg } = resultObj ;
456504 var varResult = JSON . parse ( result ) ;
457-
458- if ( varResult . length > 0 ) {
459- // columns using suggestInput
460- columnInputIdList && columnInputIdList . forEach ( columnInputId => {
461- var suggestInputX = new SuggestInput ( ) ;
462- suggestInputX . setComponentID ( columnInputId ) ;
463- suggestInputX . addClass ( 'vp-input' ) ;
464- suggestInputX . setPlaceholder ( "column name" ) ;
465- suggestInputX . setSuggestList ( function ( ) { return varResult ; } ) ; //FIXME:
466- suggestInputX . setNormalFilter ( false ) ;
467- suggestInputX . setValue ( $ ( pageThis . wrapSelector ( '#' + columnInputId ) ) . val ( ) ) ;
468- $ ( pageThis . wrapSelector ( '#' + columnInputId ) ) . replaceWith ( function ( ) {
469- return suggestInputX . toTagString ( ) ;
470- } ) ;
505+
506+ // columns using suggestInput
507+ columnInputIdList && columnInputIdList . forEach ( columnInputId => {
508+ var suggestInputX = new SuggestInput ( ) ;
509+ suggestInputX . setComponentID ( columnInputId ) ;
510+ suggestInputX . addClass ( 'vp-input vp-state' ) ;
511+ suggestInputX . setPlaceholder ( "column name" ) ;
512+ suggestInputX . setSuggestList ( function ( ) { return varResult ; } ) ; //FIXME:
513+ suggestInputX . setNormalFilter ( false ) ;
514+ suggestInputX . setValue ( $ ( selector + ' #' + columnInputId ) . val ( ) ) ;
515+ $ ( selector + ' #' + columnInputId ) . replaceWith ( function ( ) {
516+ return suggestInputX . toTagString ( ) ;
471517 } ) ;
472- }
518+ } ) ;
473519 } catch ( e ) {
474520 vpLog . display ( VP_LOG_TYPE . ERROR , 'com_generator - bindColumnSource: not supported data type. ' , e ) ;
475521 }
0 commit comments