Source: xreport-form/group.js

import { XFormElem } from './form-elem';
import { XLabel } from './label';
import $ from 'jquery';
import * as isFunction from 'lodash.isfunction';

/**
 * Instantiates a new XFormGroup element that renders a label and a child. The child is another XFormElem instance.
 * @class
 * @augments XFormElem
 */
function XFormGroup(orientation, label) {
  XFormElem.call(this, "group");
  this.child = "";
  this.label = new XLabel(label);
  this.hint;
}

XFormGroup.prototype = Object.create(XFormElem.prototype);

XFormGroup.prototype.addChild = function(child) {
  this.child = child;
}

XFormGroup.prototype.buildEditor = function() {
  var model = this;
  var editor = $("<div></div>");
  editor.append(this.label.buildEditor());
  editor.append(this.child.buildEditor());
  return editor;
}

XFormGroup.prototype.render = function() {
  var view = $("<div class='form-group'></div>");
  this.bind(view);

  if (this.child.type === "inbool") {
    var checkLabel = this.child.render();
    view.append(checkLabel.append(this.label.render(this.child.id)));
  } else {
    view.append(this.label.render());
    view.append(this.child.render());
  }

  return view;
}

XFormGroup.prototype.genText = function() {
  if (this.child.type === "inbool") {
    var view = $("*[data-x-id='" + this.id + "']");
    var checked = view.find("input:checked").first();

    if (checked.length > 0) {
      return checked.next().text();
    }
  } else if (isFunction(this.child.genText) && !!this.child.genText() && !this.child.hideFromOutput && !this.child.hidden) {
    return (this.label.val) ?  (this.label.val + ": " + this.child.genText()) : this.child.genText();
  }

  return "";
}

export { XFormGroup };