import FieldView from "./FieldView"; import SettingsSectionFields from "./SettingsSectionFields"; declare let ajaxyFormsBuilder: { constraints: { [x: string]: any }; }; class ConstraintsView extends Backbone.View { index = 0; basename = ""; data: any; container: JQuery; fieldView: FieldView; constructor(fieldView, basename, data) { super(); this.fieldView = fieldView; this.data = data || {}; this.basename = basename; } createSelect(constraintValue, index) { let container = jQuery(`

Constraint

`); let toggleContainer = jQuery('
'); let fieldsContainer = jQuery('
'); let field = jQuery("
"); let $select = jQuery(""); $select.attr("name", `${this.basename}[constraints][${index}][type]`); $select.append(jQuery("").val("").text("---")); Object.keys(ajaxyFormsBuilder.constraints).forEach((key) => { $select.append(jQuery("").val(key).text(ajaxyFormsBuilder.constraints[key].label)); }); container.find(".item-toggle").on("click", (e) => { e.preventDefault(); container.toggleClass("active"); }); let help = jQuery("").addClass("help-block"); let fields = jQuery("
"); field.append($select); fieldsContainer.append(field); fieldsContainer.append(fields); fieldsContainer.append(help); let remove = jQuery("Remove"); remove.on("click", (e) => { e.preventDefault(); container.remove(); }); fieldsContainer.append(remove); toggleContainer.append(fieldsContainer); container.append(toggleContainer); $select.on("change", (e) => { let value: string = $select.val().toString(); let constraint = ajaxyFormsBuilder.constraints[value]; fields.html(""); fields.append(new SettingsSectionFields(this.fieldView, `${this.basename}[constraints][${index}]`, constraint.fields, constraintValue).render().el); if (value && ajaxyFormsBuilder.constraints[value] && ajaxyFormsBuilder.constraints[value].help) { help.html(ajaxyFormsBuilder.constraints[value].help); if (ajaxyFormsBuilder.constraints[value].docs) { help.append( ' | View Documentation' ); } container.find(".af-text").text(ajaxyFormsBuilder.constraints[value].label); } else { container.find(".af-text").text("Constraint"); help.html(""); } }); $select.val(constraintValue.type || ""); if(constraintValue.type){ $select.trigger("change"); } return container; } renderSettings() { this.container.empty(); if (this.data) { this.data.forEach((constraint, index) => { this.container.append(this.createSelect(constraint, index)); }); } } render() { this.$el.addClass("constraints-settings"); this.container = jQuery("
").addClass("constraints-container"); let addMore = jQuery("Add Constraint"); addMore.on("click", (e) => { e.preventDefault(); this.data.push({ type: "" }); this.renderSettings(); }); this.renderSettings(); this.$el.append(this.container); this.$el.append(addMore); return this; } } export default ConstraintsView;