mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-29 17:00:59 +01:00
567dea5449
Summary: Ref T5474. This provides a Herald-like UI for editing workboard trigger rules. This probably has some missing pieces and doesn't actually save anything to the database yet, but the basics at least roughly work. Test Plan: {F6299886} Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T5474 Differential Revision: https://secure.phabricator.com/D20301
137 lines
3 KiB
JavaScript
137 lines
3 KiB
JavaScript
/**
|
|
* @requires multirow-row-manager
|
|
* trigger-rule
|
|
* @provides trigger-rule-editor
|
|
* @javelin
|
|
*/
|
|
|
|
JX.install('TriggerRuleEditor', {
|
|
|
|
construct: function(form_node) {
|
|
this._formNode = form_node;
|
|
this._rules = [];
|
|
this._types = [];
|
|
},
|
|
|
|
members: {
|
|
_formNode: null,
|
|
_tableNode: null,
|
|
_createButtonNode: null,
|
|
_inputNode: null,
|
|
_rowManager: null,
|
|
_rules: null,
|
|
_types: null,
|
|
|
|
setTableNode: function(table) {
|
|
this._tableNode = table;
|
|
return this;
|
|
},
|
|
|
|
setCreateButtonNode: function(button) {
|
|
this._createButtonNode = button;
|
|
return this;
|
|
},
|
|
|
|
setInputNode: function(input) {
|
|
this._inputNode = input;
|
|
return this;
|
|
},
|
|
|
|
start: function() {
|
|
var on_submit = JX.bind(this, this._submitForm);
|
|
JX.DOM.listen(this._formNode, 'submit', null, on_submit);
|
|
|
|
var manager = new JX.MultirowRowManager(this._tableNode);
|
|
this._rowManager = manager;
|
|
|
|
var on_remove = JX.bind(this, this._rowRemoved);
|
|
manager.listen('row-removed', on_remove);
|
|
|
|
var create_button = this._createButtonNode;
|
|
var on_create = JX.bind(this, this._createRow);
|
|
JX.DOM.listen(create_button, 'click', null, on_create);
|
|
},
|
|
|
|
_submitForm: function() {
|
|
var values = [];
|
|
for (var ii = 0; ii < this._rules.length; ii++) {
|
|
var rule = this._rules[ii];
|
|
values.push(rule.getValueForSubmit());
|
|
}
|
|
|
|
this._inputNode.value = JX.JSON.stringify(values);
|
|
},
|
|
|
|
_createRow: function(e) {
|
|
var rule = this.newRule();
|
|
this.addRule(rule);
|
|
e.kill();
|
|
},
|
|
|
|
newRule: function() {
|
|
// Create new rules with the first valid rule type.
|
|
var types = this.getTypes();
|
|
var type;
|
|
for (var ii = 0; ii < types.length; ii++) {
|
|
type = types[ii];
|
|
if (!type.getIsSelectable()) {
|
|
continue;
|
|
}
|
|
|
|
// If we make it here: this type is valid, so use it.
|
|
break;
|
|
}
|
|
|
|
var default_value = type.getDefaultValue();
|
|
|
|
return new JX.TriggerRule()
|
|
.setType(type.getType())
|
|
.setValue(default_value);
|
|
},
|
|
|
|
addRule: function(rule) {
|
|
rule.setEditor(this);
|
|
this._rules.push(rule);
|
|
|
|
var manager = this._rowManager;
|
|
|
|
var row = manager.addRow([]);
|
|
var row_id = manager.getRowID(row);
|
|
rule.setRowID(row_id);
|
|
|
|
manager.updateRow(row_id, rule.newRowContent());
|
|
},
|
|
|
|
addType: function(type) {
|
|
this._types.push(type);
|
|
return this;
|
|
},
|
|
|
|
getTypes: function() {
|
|
return this._types;
|
|
},
|
|
|
|
getType: function(type) {
|
|
for (var ii = 0; ii < this._types.length; ii++) {
|
|
if (this._types[ii].getType() === type) {
|
|
return this._types[ii];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
},
|
|
|
|
_rowRemoved: function(row_id) {
|
|
for (var ii = 0; ii < this._rules.length; ii++) {
|
|
var rule = this._rules[ii];
|
|
|
|
if (rule.getRowID() === row_id) {
|
|
this._rules.splice(ii, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
});
|