Skip to content

Commit 8f98b05

Browse files
author
minjk-bl
committed
Add col_multi component to autoGen and apply it to by option in sort_values
1 parent 5fee352 commit 8f98b05

File tree

3 files changed

+86
-9
lines changed

3 files changed

+86
-9
lines changed

visualpython/data/m_library/pandasLibrary.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1916,7 +1916,10 @@ define([
19161916
{
19171917
"name": "by",
19181918
"label": "Sort By",
1919-
"usePair": true
1919+
"usePair": true,
1920+
"component": [
1921+
"col_multi"
1922+
]
19201923
},
19211924
{
19221925
"name": "axis",

visualpython/js/com/com_generatorV2.js

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ define([
1414
'vp_base/js/com/component/SuggestInput',
1515
'vp_base/js/com/component/VarSelector2',
1616
'vp_base/js/com/component/DataSelector',
17+
'vp_base/js/com/component/MultiSelector',
1718
'vp_base/js/com/component/FileNavigation'
18-
], function (com_util, com_makeDom, SuggestInput, VarSelector2, DataSelector, FileNavigation) {
19+
], function (com_util, com_makeDom, SuggestInput, VarSelector2, DataSelector, MultiSelector, FileNavigation) {
1920
/**
2021
* show result after code executed
2122
*/
@@ -39,6 +40,7 @@ define([
3940
'var_select': 'Select Variable',
4041
'var_multi': 'Select N-Variables',
4142
'col_select': 'Select Column',
43+
'col_multi': 'Select Columns',
4244
'textarea': 'Input textarea',
4345
'input_number': 'Input number',
4446
'input_text': 'Input text',
@@ -149,6 +151,7 @@ define([
149151

150152
}
151153

154+
bindMultiSelector(pageThis);
152155
bindAutoComponentEvent(pageThis);
153156
}
154157

@@ -174,7 +177,7 @@ define([
174177
} else if (output === true) {
175178
requiredFontStyle = 'vp-bold';
176179
}
177-
var lblTag = $(`<label class="vp-bold">${label}</label>`).attr({
180+
var lblTag = $(`<label class="vp-bold">${label || com_util.optionToLabel(name)}</label>`).attr({
178181
'for': name,
179182
'class': requiredFontStyle,
180183
'title': '(' + name + ')'
@@ -315,7 +318,8 @@ define([
315318
case 'option_select':
316319
var optSlct = $('<select></select>').attr({
317320
'class':'vp-select option-select vp-state',
318-
'id':obj.name
321+
'id':obj.name,
322+
'title': (obj.help==undefined?'':obj.help),
319323
});
320324
obj.options.forEach((opt, idx, arr) => {
321325
var label = (obj.options_label != undefined? obj.options_label[idx]:opt);
@@ -368,6 +372,7 @@ define([
368372
let dataSelector = new DataSelector({
369373
pageThis: pageThis,
370374
id: obj.name,
375+
type: obj.comp_type || 'data',
371376
allowDataType: obj.var_type,
372377
placeholder: obj.placeholder || 'Select data',
373378
value: value,
@@ -382,7 +387,8 @@ define([
382387
id: obj.name,
383388
class: 'vp-input vp-state',
384389
placeholder: obj.placeholder || 'Select data',
385-
required: obj.required === true
390+
required: obj.required === true,
391+
title: (obj.help==undefined?'':obj.help),
386392
});
387393
vp_generateVarSuggestInput(pageThis.wrapSelector(), obj);
388394
content = tag;
@@ -393,7 +399,8 @@ define([
393399
'id': obj.name,
394400
'class': 'vp-select var-multi vp-state',
395401
// multiple selection true
396-
'multiple': true
402+
'multiple': true,
403+
'title': (obj.help==undefined?'':obj.help),
397404
});
398405
vp_generateVarSelect(tag, obj.var_type, obj.value);
399406
content = tag;
@@ -402,10 +409,28 @@ define([
402409
var tag = $('<input/>').attr({
403410
'type': 'text',
404411
'id': obj.name,
405-
'class': 'vp-input vp-state'
412+
'class': 'vp-input vp-state',
413+
'title': (obj.help==undefined?'':obj.help),
406414
});
407415
content = tag;
408416
break;
417+
case 'col_multi':
418+
var tag1 = $('<div></div>').attr({
419+
'id': obj.name + '_auto_comp',
420+
'class': 'vp-auto-multi-column',
421+
'data-id': obj.name,
422+
'data-target': obj.comp_target || 'i0',
423+
'style': 'height: 150px;',
424+
'title': (obj.help==undefined?'':obj.help),
425+
});
426+
var tag2 = $('<input/>').attr({
427+
type: 'hidden',
428+
id: obj.name,
429+
class: 'vp-input vp-state',
430+
})
431+
var tag = $('<div></div>').append(tag1).append(tag2);
432+
content = tag;
433+
break;
409434
case 'textarea':
410435
var textarea = $(`<textarea id="${obj.name}" class="vp-textarea vp-state">${(obj.default==undefined?'':obj.default)}</textarea>`);
411436
// cell metadata test
@@ -710,6 +735,12 @@ define([
710735
case 'dtype':
711736
value = $(pageThis.wrapSelector(parent + ' #'+obj.name)).val();
712737
break;
738+
case 'col_multi':
739+
let colList = pageThis.autoGen[obj.name].getDataList();
740+
pageThis.state[obj.name] = colList.map(data => { return data.code });
741+
value = colList.map(data => { return data.code }).join(',');
742+
$(pageThis.wrapSelector('#'+obj.name)).val(value);
743+
break;
713744
case 'file-open':
714745
case 'file-save':
715746
case 'table':
@@ -1236,6 +1267,50 @@ define([
12361267
return $('<input value="tabblock"/>');
12371268
}
12381269

1270+
var bindMultiSelector = function(pageThis) {
1271+
//====================================================================
1272+
// for column multi selector
1273+
//====================================================================
1274+
$(pageThis.wrapSelector('.vp-auto-multi-column')).each((idx, tag) => {
1275+
let compId = tag.id;
1276+
let id = $(tag).data('id');
1277+
let targetId = $(tag).data('target');
1278+
let colSelector = new MultiSelector(
1279+
pageThis.wrapSelector('#' + compId),
1280+
{ mode: 'columns', parent: (pageThis.state[targetId] || ''), selectedList: pageThis.state[compId] }
1281+
);
1282+
pageThis.autoGen = {
1283+
[id]: colSelector,
1284+
...pageThis.autoGen
1285+
};
1286+
$(pageThis.wrapSelector('#' + targetId)).on('change', function() {
1287+
let targetVariable = $(this).val();
1288+
let colSelector = new MultiSelector(
1289+
pageThis.wrapSelector('#' + compId),
1290+
{
1291+
mode: 'columns', parent: targetVariable, selectedList: pageThis.state[compId],
1292+
change: function(type, list) {
1293+
let value = list.map(data => { return data.code }).join(',');
1294+
if (list.length == 0) {
1295+
value = '';
1296+
} else if (list.length > 1) {
1297+
value = '[' + value + ']';
1298+
}
1299+
pageThis.state[compId] = list.map(data => { return data.code });
1300+
pageThis.state[id] = value;
1301+
$(pageThis.wrapSelector('#'+id)).val(value);
1302+
}
1303+
},
1304+
);
1305+
pageThis.autoGen = {
1306+
[id]: colSelector,
1307+
...pageThis.autoGen
1308+
};
1309+
});
1310+
1311+
});
1312+
}
1313+
12391314
var bindAutoComponentEvent = function(pageThis) {
12401315
let selector = pageThis.wrapSelector();
12411316
// Auto-component selector
@@ -1499,7 +1574,6 @@ define([
14991574
$(pageThis.wrapSelector('#'+id)).val(code);
15001575
});
15011576

1502-
15031577
//====================================================================
15041578
// Event for tabBlock
15051579
//====================================================================

visualpython/js/com/component/MultiSelector.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ define([
9090

9191
var that = this;
9292

93-
if (parent === '') {
93+
if (parent == null || parent === '' || (Array.isArray(parent) && parent.length == 0)) {
9494
this._executeCallback([]);
9595
return;
9696
}

0 commit comments

Comments
 (0)