alchemy-form 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/assets/stylesheets/form/alchemy_field_array.scss +4 -0
- package/assets/stylesheets/form/alchemy_toggle.scss +2 -0
- package/assets/stylesheets/form/query_builder.scss +185 -0
- package/config/routes.js +8 -0
- package/controller/form_api_controller.js +51 -2
- package/element/20_query_builder_base.js +82 -0
- package/element/25_query_builder_data.js +139 -0
- package/element/alchemy_field.js +19 -2
- package/element/alchemy_select.js +40 -2
- package/element/alchemy_select_item.js +42 -1
- package/element/alchemy_table.js +123 -21
- package/element/query_builder.js +90 -0
- package/element/query_builder_entry.js +388 -0
- package/element/query_builder_group.js +248 -0
- package/element/query_builder_value.js +316 -0
- package/element/query_builder_variable.js +103 -0
- package/helper/form_actions/00_form_action.js +328 -0
- package/helper/form_actions/url_action.js +69 -0
- package/helper/query_builder_variable_definition/00_variable_definition.js +371 -0
- package/helper/query_builder_variable_definition/boolean_variable_definition.js +24 -0
- package/helper/query_builder_variable_definition/list_variable_definition.js +38 -0
- package/helper/query_builder_variable_definition/number_variable_definition.js +106 -0
- package/helper/query_builder_variable_definition/string_variable_definition.js +46 -0
- package/helper_field/query_builder_assignment.js +11 -0
- package/helper_field/query_builder_field.js +91 -0
- package/helper_field/query_builder_value.js +56 -0
- package/helper_field/query_builder_variable.js +56 -0
- package/package.json +1 -1
- package/view/form/elements/alchemy_field_array.hwk +3 -1
- package/view/form/elements/alchemy_field_array_entry.hwk +3 -1
- package/view/form/elements/alchemy_select_item.hwk +6 -1
- package/view/form/elements/query_builder.hwk +1 -0
- package/view/form/elements/query_builder_entry.hwk +33 -0
- package/view/form/elements/query_builder_group.hwk +64 -0
- package/view/form/elements/query_builder_value.hwk +10 -0
- package/view/form/elements/query_builder_variable.hwk +6 -0
- package/view/form/inputs/edit/query_builder.hwk +5 -0
- package/view/form/inputs/edit/query_builder_assignment.hwk +6 -0
- package/view/form/inputs/edit/query_builder_value.hwk +11 -0
- package/view/form/inputs/edit/query_builder_variable.hwk +10 -0
- package/view/form/select/qb_item.hwk +7 -0
package/element/alchemy_table.js
CHANGED
|
@@ -513,7 +513,7 @@ Table.setMethod(function getCurrentStateUrl() {
|
|
|
513
513
|
*
|
|
514
514
|
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
515
515
|
* @since 0.1.0
|
|
516
|
-
* @version 0.1.
|
|
516
|
+
* @version 0.1.6
|
|
517
517
|
*
|
|
518
518
|
* @param {Array} records
|
|
519
519
|
*/
|
|
@@ -530,6 +530,7 @@ Table.setMethod(function setRecords(records) {
|
|
|
530
530
|
}
|
|
531
531
|
|
|
532
532
|
this.showPagination();
|
|
533
|
+
this.attachContextMenus();
|
|
533
534
|
});
|
|
534
535
|
|
|
535
536
|
/**
|
|
@@ -593,7 +594,7 @@ Table.setMethod(function showPagination() {
|
|
|
593
594
|
*
|
|
594
595
|
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
595
596
|
* @since 0.1.0
|
|
596
|
-
* @version 0.1.
|
|
597
|
+
* @version 0.1.6
|
|
597
598
|
*
|
|
598
599
|
* @param {Object} entry
|
|
599
600
|
*
|
|
@@ -604,7 +605,10 @@ Table.setMethod(function createDataRow(entry) {
|
|
|
604
605
|
let field,
|
|
605
606
|
value,
|
|
606
607
|
tr = this.createElement('tr'),
|
|
607
|
-
td
|
|
608
|
+
td,
|
|
609
|
+
id = entry.$pk || entry._id || entry.id;
|
|
610
|
+
|
|
611
|
+
tr.dataset.pk = id;
|
|
608
612
|
|
|
609
613
|
for (field of this.fieldset) {
|
|
610
614
|
td = this.createElement('td');
|
|
@@ -623,31 +627,22 @@ Table.setMethod(function createDataRow(entry) {
|
|
|
623
627
|
td.classList.add('aft-actions');
|
|
624
628
|
tr.append(td);
|
|
625
629
|
|
|
626
|
-
let actions;
|
|
627
|
-
|
|
628
|
-
if (entry.$hold && entry.$hold.actions) {
|
|
629
|
-
actions = entry.$hold.actions;
|
|
630
|
-
} else {
|
|
631
|
-
actions = entry.$actions;
|
|
632
|
-
}
|
|
630
|
+
let actions = this.getEntryActions(entry, 'row');
|
|
633
631
|
|
|
634
632
|
if (actions && actions.length) {
|
|
633
|
+
|
|
635
634
|
let action,
|
|
636
635
|
anchor;
|
|
637
636
|
|
|
637
|
+
// Iterate over all the defined actions
|
|
638
638
|
for (action of actions) {
|
|
639
|
-
|
|
640
|
-
anchor
|
|
641
|
-
|
|
642
|
-
if (
|
|
643
|
-
|
|
644
|
-
alico.setAttribute('type', action.icon);
|
|
645
|
-
anchor.append(alico);
|
|
646
|
-
} else {
|
|
647
|
-
anchor.textContent = action.title || action.name;
|
|
639
|
+
|
|
640
|
+
anchor = action.constructElement(this);
|
|
641
|
+
|
|
642
|
+
if (!anchor) {
|
|
643
|
+
continue;
|
|
648
644
|
}
|
|
649
645
|
|
|
650
|
-
anchor.setAttribute('href', action.url);
|
|
651
646
|
td.append(anchor);
|
|
652
647
|
}
|
|
653
648
|
}
|
|
@@ -658,6 +653,111 @@ Table.setMethod(function createDataRow(entry) {
|
|
|
658
653
|
return tr;
|
|
659
654
|
});
|
|
660
655
|
|
|
656
|
+
/**
|
|
657
|
+
* Get a list of actions
|
|
658
|
+
*
|
|
659
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
660
|
+
* @since 0.1.6
|
|
661
|
+
* @version 0.1.6
|
|
662
|
+
*
|
|
663
|
+
* @param {Object} record
|
|
664
|
+
* @param {Stirng} filter
|
|
665
|
+
*
|
|
666
|
+
* @return {Alchemy.Form.Action.Action[]}
|
|
667
|
+
*/
|
|
668
|
+
Table.setMethod(function getEntryActions(record, filter) {
|
|
669
|
+
|
|
670
|
+
let result = [];
|
|
671
|
+
|
|
672
|
+
if (!record) {
|
|
673
|
+
return result;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
let actions;
|
|
677
|
+
|
|
678
|
+
if (record.$hold && record.$hold.actions) {
|
|
679
|
+
actions = record.$hold.actions;
|
|
680
|
+
} else {
|
|
681
|
+
actions = record.$actions;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
if(!actions || !actions.length) {
|
|
685
|
+
return result;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
for (let action of actions) {
|
|
689
|
+
|
|
690
|
+
if (!action.type) {
|
|
691
|
+
action.type = 'url';
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// Make sure it's an action instance
|
|
695
|
+
action = Classes.Alchemy.Form.Action.Action.cast(action);
|
|
696
|
+
|
|
697
|
+
if (!action || (filter && !action.isAllowedIn(filter))) {
|
|
698
|
+
continue;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
result.push(action);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
return result;
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* Add context menus to rows
|
|
709
|
+
*
|
|
710
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
711
|
+
* @since 0.1.6
|
|
712
|
+
* @version 0.1.7
|
|
713
|
+
*
|
|
714
|
+
* @param {Object} entry
|
|
715
|
+
*/
|
|
716
|
+
Table.setMethod(function attachContextMenus() {
|
|
717
|
+
|
|
718
|
+
if (!Blast.isBrowser) {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (!this.assigned_data.records || !this.assigned_data.records.length) {
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
for (let record of this.assigned_data.records) {
|
|
727
|
+
|
|
728
|
+
let context_actions = this.getEntryActions(record, 'context');
|
|
729
|
+
|
|
730
|
+
if (!context_actions || !context_actions.length) {
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
let pk = record.$pk || record._id || record.id;
|
|
735
|
+
|
|
736
|
+
if (!pk) {
|
|
737
|
+
continue;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
let tr = this.querySelector('[data-pk="' + pk + '"]');
|
|
741
|
+
|
|
742
|
+
if (!tr) {
|
|
743
|
+
continue;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
tr.addEventListener('contextmenu', e => {
|
|
747
|
+
|
|
748
|
+
this.selectRow(tr);
|
|
749
|
+
|
|
750
|
+
let menu = this.createElement('he-context-menu');
|
|
751
|
+
|
|
752
|
+
for (let action of context_actions) {
|
|
753
|
+
action.addToContextMenu(menu);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
menu.show(e);
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
});
|
|
760
|
+
|
|
661
761
|
/**
|
|
662
762
|
* On new fieldset
|
|
663
763
|
*
|
|
@@ -931,12 +1031,14 @@ Table.setMethod(function sortData() {
|
|
|
931
1031
|
*
|
|
932
1032
|
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
933
1033
|
* @since 0.1.0
|
|
934
|
-
* @version 0.1.
|
|
1034
|
+
* @version 0.1.6
|
|
935
1035
|
*/
|
|
936
1036
|
Table.setMethod(function introduced() {
|
|
937
1037
|
|
|
938
1038
|
const that = this;
|
|
939
1039
|
|
|
1040
|
+
this.attachContextMenus();
|
|
1041
|
+
|
|
940
1042
|
this.addEventListener('click', function onClick(e) {
|
|
941
1043
|
|
|
942
1044
|
let target = e.target,
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The alchemy-toggle custom element
|
|
3
|
+
*
|
|
4
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
5
|
+
* @since 0.1.6
|
|
6
|
+
* @version 0.1.6
|
|
7
|
+
*/
|
|
8
|
+
const QueryBuilder = Function.inherits('Alchemy.Element.Form.Base', 'QueryBuilder');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The template code
|
|
12
|
+
*
|
|
13
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
14
|
+
* @since 0.1.6
|
|
15
|
+
* @version 0.1.6
|
|
16
|
+
*/
|
|
17
|
+
QueryBuilder.setTemplate(`<alchemy-query-builder-group></alchemy-query-builder-group>`, {plain_html: true, render_immediate: true});
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The stylesheet to load for this element
|
|
21
|
+
*
|
|
22
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
23
|
+
* @since 0.1.6
|
|
24
|
+
* @version 0.1.6
|
|
25
|
+
*/
|
|
26
|
+
QueryBuilder.setStylesheetFile('form/query_builder');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The dataprovider used to get the variables
|
|
30
|
+
*
|
|
31
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
32
|
+
* @since 0.1.6
|
|
33
|
+
* @version 0.1.6
|
|
34
|
+
*/
|
|
35
|
+
QueryBuilder.setAssignedProperty('dataprovider');
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Getter for the header element
|
|
39
|
+
*
|
|
40
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
41
|
+
* @since 0.1.6
|
|
42
|
+
* @version 0.1.6
|
|
43
|
+
*/
|
|
44
|
+
QueryBuilder.addElementGetter('root_group', ':scope > alchemy-query-builder-group');
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get/set the value
|
|
48
|
+
*
|
|
49
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
50
|
+
* @since 0.1.6
|
|
51
|
+
* @version 0.1.6
|
|
52
|
+
*/
|
|
53
|
+
QueryBuilder.setProperty(function value() {
|
|
54
|
+
return this.root_group.value;
|
|
55
|
+
}, function setValue(value) {
|
|
56
|
+
this.assigned_data.value = value;
|
|
57
|
+
|
|
58
|
+
if (Blast.isBrowser && this.has_rendered) {
|
|
59
|
+
this.applyValue(value);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Apply the given value
|
|
65
|
+
*
|
|
66
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
67
|
+
* @since 0.1.6
|
|
68
|
+
* @version 0.1.6
|
|
69
|
+
*/
|
|
70
|
+
QueryBuilder.setMethod(function applyValue(value) {
|
|
71
|
+
|
|
72
|
+
if (!value) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this.root_group.value = value;
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Added to the dom
|
|
81
|
+
*
|
|
82
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
83
|
+
* @since 0.1.6
|
|
84
|
+
* @version 0.1.6
|
|
85
|
+
*/
|
|
86
|
+
QueryBuilder.setMethod(function introduced() {
|
|
87
|
+
if (this.assigned_data.value) {
|
|
88
|
+
this.applyValue(this.assigned_data.value);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The query-builder-entry custom element
|
|
3
|
+
*
|
|
4
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
5
|
+
* @since 0.1.6
|
|
6
|
+
* @version 0.1.6
|
|
7
|
+
*/
|
|
8
|
+
const QueryBuilderEntry = Function.inherits('Alchemy.Element.Form.QueryBuilderBase', 'QueryBuilderEntry');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The template to use for the content of this element
|
|
12
|
+
*
|
|
13
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
14
|
+
* @since 0.1.6
|
|
15
|
+
* @version 0.1.6
|
|
16
|
+
*/
|
|
17
|
+
QueryBuilderEntry.setTemplateFile('form/elements/query_builder_entry');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The type of entry
|
|
21
|
+
* (can change the operators used)
|
|
22
|
+
*
|
|
23
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
24
|
+
* @since 0.1.6
|
|
25
|
+
* @version 0.1.6
|
|
26
|
+
*/
|
|
27
|
+
QueryBuilderEntry.setAttribute('type');
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Getter for the field selector
|
|
31
|
+
*
|
|
32
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
33
|
+
* @since 0.1.6
|
|
34
|
+
* @version 0.1.6
|
|
35
|
+
*/
|
|
36
|
+
QueryBuilderEntry.addElementGetter('field_select', '.qb-field');
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Getter for the operator selector
|
|
40
|
+
*
|
|
41
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
42
|
+
* @since 0.1.6
|
|
43
|
+
* @version 0.1.6
|
|
44
|
+
*/
|
|
45
|
+
QueryBuilderEntry.addElementGetter('operator_select', '.qb-operator');
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Getter for the value type selector
|
|
49
|
+
* (variable, value)
|
|
50
|
+
*
|
|
51
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
52
|
+
* @since 0.1.6
|
|
53
|
+
* @version 0.1.6
|
|
54
|
+
*/
|
|
55
|
+
QueryBuilderEntry.addElementGetter('value_type_select', '.qb-value-type');
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Getter for the value input wrapper
|
|
59
|
+
*
|
|
60
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
61
|
+
* @since 0.1.6
|
|
62
|
+
* @version 0.1.6
|
|
63
|
+
*/
|
|
64
|
+
QueryBuilderEntry.addElementGetter('value_input_wrapper', '.qb-value-input-wrapper');
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Getter for the delete button
|
|
68
|
+
*
|
|
69
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
70
|
+
* @since 0.1.6
|
|
71
|
+
* @version 0.1.6
|
|
72
|
+
*/
|
|
73
|
+
QueryBuilderEntry.addElementGetter('delete_button', '.qb-delete-entry');
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get/set the value
|
|
77
|
+
*
|
|
78
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
79
|
+
* @since 0.1.6
|
|
80
|
+
* @version 0.1.6
|
|
81
|
+
*/
|
|
82
|
+
QueryBuilderEntry.setProperty(function value() {
|
|
83
|
+
|
|
84
|
+
if (!this.field_select.value) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let result = {
|
|
89
|
+
type : 'qb_entry',
|
|
90
|
+
field : this.field_select.value,
|
|
91
|
+
operator : this.operator_select.value,
|
|
92
|
+
source_type : this.value_type_select.value,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
if (result.source_type == 'variable') {
|
|
96
|
+
let select = this.value_input_wrapper.querySelector('.qb-value-variable');
|
|
97
|
+
|
|
98
|
+
if (select) {
|
|
99
|
+
result.value_variable = select.value;
|
|
100
|
+
}
|
|
101
|
+
} else if (result.source_type == 'value') {
|
|
102
|
+
let input = this.value_input_wrapper.querySelector('.qb-value-input');
|
|
103
|
+
|
|
104
|
+
if (input) {
|
|
105
|
+
let value_explicit = {
|
|
106
|
+
type : this.getValueType(input),
|
|
107
|
+
value : null,
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
if (value_explicit.type == 'number' && typeof input.valueAsNumber != 'undefined') {
|
|
111
|
+
value_explicit.value = input.valueAsNumber;
|
|
112
|
+
} else {
|
|
113
|
+
value_explicit.value = input.value;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
result.value_explicit = value_explicit;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return result;
|
|
121
|
+
}, function setValue(value) {
|
|
122
|
+
this.assigned_data.value = value;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Load data for a specific element
|
|
127
|
+
*
|
|
128
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
129
|
+
* @since 0.1.6
|
|
130
|
+
* @version 0.1.6
|
|
131
|
+
*/
|
|
132
|
+
QueryBuilderEntry.setMethod(async function loadData(config, element) {
|
|
133
|
+
|
|
134
|
+
if (!element) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (!config) {
|
|
139
|
+
config = {};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let items;
|
|
143
|
+
|
|
144
|
+
if (element.classList.contains('qb-field') || element.classList.contains('qb-value-variable')) {
|
|
145
|
+
items = await this.loadVariableData(config);
|
|
146
|
+
} else if (element.classList.contains('qb-operator')) {
|
|
147
|
+
items = await this.loadOperatorData(config);
|
|
148
|
+
} else if (element.classList.contains('qb-value-type')) {
|
|
149
|
+
items = await this.loadValueTypeData(config);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
console.log('Got items:', items);
|
|
153
|
+
items.clean(null);
|
|
154
|
+
items.clean(undefined);
|
|
155
|
+
items.clean(false);
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
items: items,
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Load value type data
|
|
164
|
+
*
|
|
165
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
166
|
+
* @since 0.1.6
|
|
167
|
+
* @version 0.1.6
|
|
168
|
+
*/
|
|
169
|
+
QueryBuilderEntry.setMethod(async function loadValueTypeData(config) {
|
|
170
|
+
|
|
171
|
+
let items = [];
|
|
172
|
+
|
|
173
|
+
items.push({id: 'variable', title: 'Other variable'});
|
|
174
|
+
items.push({id: 'value', title: 'Value'});
|
|
175
|
+
|
|
176
|
+
return items;
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Load variable data
|
|
181
|
+
*
|
|
182
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
183
|
+
* @since 0.1.6
|
|
184
|
+
* @version 0.1.6
|
|
185
|
+
*/
|
|
186
|
+
QueryBuilderEntry.setMethod(async function loadVariableData(config) {
|
|
187
|
+
|
|
188
|
+
config.value_type = 'variable';
|
|
189
|
+
|
|
190
|
+
let dataprovider = this.dataprovider;
|
|
191
|
+
|
|
192
|
+
if (!config) {
|
|
193
|
+
config = {};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
config.type = this.type || 'logical';
|
|
197
|
+
|
|
198
|
+
let variables = [];
|
|
199
|
+
|
|
200
|
+
if (dataprovider) {
|
|
201
|
+
variables = await dataprovider.loadData(config, this);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
let result = [];
|
|
205
|
+
|
|
206
|
+
if (variables && variables.length) {
|
|
207
|
+
let allow_readonly = true,
|
|
208
|
+
entry;
|
|
209
|
+
|
|
210
|
+
if (config.type != 'logical') {
|
|
211
|
+
allow_readonly = false;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
for (entry of variables) {
|
|
215
|
+
if (entry) {
|
|
216
|
+
if (allow_readonly || !entry.readonly) {
|
|
217
|
+
result.push(entry);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Example
|
|
224
|
+
// items.push({
|
|
225
|
+
// id : 'id',
|
|
226
|
+
// title : 'ID',
|
|
227
|
+
// type : 'number'
|
|
228
|
+
// });
|
|
229
|
+
|
|
230
|
+
return result;
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Load operator data
|
|
235
|
+
*
|
|
236
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
237
|
+
* @since 0.1.6
|
|
238
|
+
* @version 0.1.6
|
|
239
|
+
*/
|
|
240
|
+
QueryBuilderEntry.setMethod(async function loadOperatorData(config) {
|
|
241
|
+
|
|
242
|
+
let type = this.field_select.value;
|
|
243
|
+
|
|
244
|
+
if (!type) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
let variable_def = this.field_select.getValueData(type);
|
|
249
|
+
|
|
250
|
+
let items = [];
|
|
251
|
+
|
|
252
|
+
if (variable_def) {
|
|
253
|
+
|
|
254
|
+
if (!this.type || this.type == 'logical') {
|
|
255
|
+
items.include(variable_def.getLogicalOperators());
|
|
256
|
+
} else if (this.type == 'assignment') {
|
|
257
|
+
items.include(variable_def.getAssignmentOperators());
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return items;
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Show the correct value input
|
|
266
|
+
*
|
|
267
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
268
|
+
* @since 0.1.6
|
|
269
|
+
* @version 0.1.6
|
|
270
|
+
*/
|
|
271
|
+
QueryBuilderEntry.setMethod(async function showValueInput() {
|
|
272
|
+
|
|
273
|
+
let variable_name = this.field_select.value;
|
|
274
|
+
|
|
275
|
+
if (!variable_name) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
let entry = this.field_select.getValueData(variable_name);
|
|
280
|
+
|
|
281
|
+
if (!entry) {
|
|
282
|
+
await this.field_select.waitForTasks();
|
|
283
|
+
|
|
284
|
+
entry = this.field_select.getValueData(variable_name);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (!entry) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
let element = entry.createValueInput(this.hawkejs_renderer);
|
|
292
|
+
|
|
293
|
+
element.classList.add('qb-value-input');
|
|
294
|
+
|
|
295
|
+
this.value_input_wrapper.append(element);
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Apply the given value
|
|
300
|
+
*
|
|
301
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
302
|
+
* @since 0.1.6
|
|
303
|
+
* @version 0.1.6
|
|
304
|
+
*/
|
|
305
|
+
QueryBuilderEntry.setMethod(async function applyValue(value) {
|
|
306
|
+
|
|
307
|
+
if (!value) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
this.field_select.value = value.field;
|
|
312
|
+
this.operator_select.value = value.operator;
|
|
313
|
+
this.value_type_select.value = value.source_type;
|
|
314
|
+
|
|
315
|
+
await this.applyValueTypeChanges();
|
|
316
|
+
|
|
317
|
+
if (value.source_type == 'variable') {
|
|
318
|
+
let select = this.value_input_wrapper.querySelector('.qb-value-variable');
|
|
319
|
+
|
|
320
|
+
if (select) {
|
|
321
|
+
select.value = value.value_variable;
|
|
322
|
+
}
|
|
323
|
+
} else if (value.source_type == 'value') {
|
|
324
|
+
let input = this.value_input_wrapper.querySelector('.qb-value-input');
|
|
325
|
+
|
|
326
|
+
if (input && value.value_explicit) {
|
|
327
|
+
input.value = value.value_explicit.value;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Apply value type changes
|
|
334
|
+
*
|
|
335
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
336
|
+
* @since 0.1.6
|
|
337
|
+
* @version 0.1.6
|
|
338
|
+
*/
|
|
339
|
+
QueryBuilderEntry.setMethod(async function applyValueTypeChanges() {
|
|
340
|
+
|
|
341
|
+
Hawkejs.removeChildren(this.value_input_wrapper);
|
|
342
|
+
|
|
343
|
+
let type = this.value_type_select.value;
|
|
344
|
+
|
|
345
|
+
if (type == 'variable') {
|
|
346
|
+
let select = this.createElement('alchemy-select');
|
|
347
|
+
select.value_item_template = 'form/select/qb_item';
|
|
348
|
+
select.option_item_template = 'form/select/qb_item';
|
|
349
|
+
|
|
350
|
+
select.dataprovider = this;
|
|
351
|
+
select.classList.add('qb-value-variable');
|
|
352
|
+
this.value_input_wrapper.append(select);
|
|
353
|
+
} else if (type == 'value') {
|
|
354
|
+
await this.showValueInput();
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Added to the dom
|
|
360
|
+
*
|
|
361
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
362
|
+
* @since 0.1.6
|
|
363
|
+
* @version 0.1.6
|
|
364
|
+
*/
|
|
365
|
+
QueryBuilderEntry.setMethod(function introduced() {
|
|
366
|
+
|
|
367
|
+
this.field_select.addEventListener('change', e => {
|
|
368
|
+
e.preventDefault();
|
|
369
|
+
|
|
370
|
+
this.operator_select.value = null;
|
|
371
|
+
this.value_type_select.value = null;
|
|
372
|
+
Hawkejs.removeChildren(this.value_input_wrapper);
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
this.delete_button.addEventListener('click', e => {
|
|
376
|
+
e.preventDefault();
|
|
377
|
+
this.remove();
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
this.value_type_select.addEventListener('change', e => {
|
|
381
|
+
e.preventDefault();
|
|
382
|
+
this.applyValueTypeChanges();
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
if (this.assigned_data.value) {
|
|
386
|
+
this.applyValue(this.assigned_data.value);
|
|
387
|
+
}
|
|
388
|
+
});
|