Merge pull request #2452 from totten/lolas-freeform-CRM-14126
[civicrm-core.git] / js / view / crm.designer.js
index fff8dacbd92ce521aca6679be5995ee4cb8dbecb..de2e88ab04ec10c95d8b2f9fa7ab3f8a8b574a75 100644 (file)
 
       paletteView.model.getRel('ufEntityCollection').each(function(ufEntityModel){
         _.each(ufEntityModel.getSections(), function(section, sectionKey){
-
-          // build filter select
-          if (sectionKey == 'default') {
-            paletteView.$('.crm-contact-types').append('<option value="' + ufEntityModel.get('entity_name') + '">' + section.title + '</option>');
+          var defaultValue = paletteView.selectedContactType;
+          if (!defaultValue) {
+            defaultValue = paletteView.model.calculateContactEntityType();
           }
 
-          if (!paletteView.selectedContactType) {
-            paletteView.selectedContactType = paletteView.$('.crm-contact-types option:first').val();
-          }
           // set selected option as default, since we are rebuilding palette
-          paletteView.$('.crm-contact-types').val(paletteView.selectedContactType).prop('selected','selected');
-
-          if (paletteView.selectedContactType != ufEntityModel.get('entity_name')) {
-            return true;
-          }
+          paletteView.$('.crm-contact-types').val(defaultValue).prop('selected','selected');
 
           var entitySection = ufEntityModel.get('entity_name') + '-' + sectionKey;
           var items = [];
     },
     doSetPaletteEntity: function(event) {
       this.selectedContactType = $('.crm-contact-types :selected').val();
-      this.render();
+      // loop through entity collection and remove non-valid entity section's
+      var newUfEntityModels = [];
+      this.model.getRel('ufEntityCollection').each(function(oldUfEntityModel){
+        var values = oldUfEntityModel.toJSON();
+        if (values.entity_name == 'contact_1') {
+          values.entity_type = $('.crm-contact-types :selected').val();
+        }
+        newUfEntityModels.push(new CRM.UF.UFEntityModel(values));
+      });
+      this.model.getRel('ufEntityCollection').reset(newUfEntityModels);
     },
     doAddToCanvas: function(event) {
       var paletteFieldModel = this.model.getRel('paletteFieldCollection').get($(event.currentTarget).attr('data-plm-cid'));
       var paletteFieldCollection = this.model.getRel('paletteFieldCollection');
       var paletteFieldModel = paletteFieldCollection.getFieldByName(ufFieldModel.get('entity_name'), ufFieldModel.get('field_name'));
       var isAddable = ufFieldCollection.isAddable(ufFieldModel);
-      this.$('[data-plm-cid='+paletteFieldModel.cid+']').toggleClass('disabled', !isAddable);
+      if (paletteFieldModel) {
+        this.$('[data-plm-cid='+paletteFieldModel.cid+']').toggleClass('disabled', !isAddable);
+      }
     },
     toggleAll: function(event) {
       if ($('.crm-designer-palette-search input').val() == '') {
       this.model.getRel('ufFieldCollection')
         .on('add', this.updatePlaceholder, this)
         .on('remove', this.updatePlaceholder, this)
-        .on('add', this.addUFFieldView, this);
+        .on('add', this.addUFFieldView, this)
+        .on('reset', this.render, this);
     },
     onClose: function() {
       this.model.getRel('ufFieldCollection')
         .off('add', this.updatePlaceholder, this)
         .off('remove', this.updatePlaceholder, this)
-        .off('add', this.addUFFieldView, this);
+        .off('add', this.addUFFieldView, this)
+        .off('reset', this.render, this);
     },
     render: function() {
       var ufFieldCanvasView = this;