gerd
11/8/2016 - 1:17 PM

jstree_single_nodes.js

/**
 * Common js file to handle all single node js trees
 * author : turlra01
 */

lexisnexis.component.JSTreeSingleNodes = lexisnexis.component.Component
.extend({
  data : {
    
  },
  ready : function() {
    
  },
  /**
   * Method to setup js tree and register events
   *  action : the action that caused the selection to change
   *  selected: the current selection
   *  event : the event (if any) that triggered this changed event
   */
  setupAvailableJsTree : function(cs, data, availableJsTree){
    
    $(availableJsTree).jstree({
      'plugins' : ["checkbox", "sort", "wholerow"],
      "checkbox" : {
      },
      'core' : {
        'check_callback' : true,
        'themes' : {
          'icons' : false,
          'responsive' : true
        },
        'data' : data.leftPanel
      }
    }).bind("changed.jstree", function (node, action, selected, event) {
      cs.bindLeftCheckBoxEvent(cs.data.availableDiv, cs.data.udfSelectAllAvailableCheckBox, cs.data.udfMoveRightBtn);
    }).bind("ready.jstree", function(){
      cs.showDefaultLeftPanelText(cs.data.availableDiv, cs.data.availableListPlaceholder, cs);
      cs.bindLeftCheckBoxEvent(cs.data.availableDiv, cs.data.udfSelectAllAvailableCheckBox, cs.data.udfMoveRightBtn);
      cs.enableOrDisableSelectAllCheckBoxOfAvailable(cs.data.availableDiv, cs.data.udfSelectAllAvailableCheckBox);
    });
  },
  
  /**
   * Method to setup js tree and register events
   *  action : the action that caused the selection to change
   *  selected: the current selection
   *  event : the event (if any) that triggered this changed event
   */
  setupSelectedJsTree : function(cs, data, selectedJsTree){
    
    $(selectedJsTree).jstree({
      'plugins' : ["checkbox", "sort", "wholerow"],
      "checkbox" : {
      },
      'core' : {
        'check_callback' : true,
        'themes' : {
          'icons' : false,
          'responsive' : true
        },
        'data' : data.rightPanel
      }
    }).bind("changed.jstree", function (node, action, selected, event) {
      cs.bindRightCheckBoxEvent(cs.data.selectedDiv, cs.data.udfSelectAllSelectedCheckBox, cs.data.udfMoveLeftBtn);
      cs.addGrayColorText(cs);
    }).bind("ready.jstree", function(){
      $(selectedJsTree).jstree("open_all");
      cs.addGrayColorText(cs);
      cs.showDefaultRightPaneText(cs.data.selectedDiv, cs.data.selectedListPlaceHolder);
      cs.bindRightCheckBoxEvent(cs.data.selectedDiv, cs.data.udfSelectAllSelectedCheckBox, cs.data.udfMoveLeftBtn);
      cs.enableOrDisableSelectAllCheckBoxOfSelected(cs.data.selectedDiv, cs.data.udfSelectAllSelectedCheckBox);
    }).bind("open_node.jstree", function(){
      cs.addGrayColorText(cs);
    });
  },
  
  /* Binding search operation */
  setupJSSearch : function(searchInpubox){
    var cs = this;
    //Preventing the default submit action for the search box. 
    $(searchInpubox).keydown(function(e) {
      if (e.keyCode == 13) {
        e.preventDefault();
      }
    });
    
    // Clear
    $(searchInpubox).focusout(function(e) {
      if (searchInpubox.val().length < 3) {
        searchInpubox.val('');
      }
    });

  },  
  /**
   * Method moves selected nodes right to left
   */
  moveNodesToRight : function(availableJsTree, selectedJsTree, classificationVal, cs){
 
    var availableJsTreeRef = $(availableJsTree).jstree(true);
    var selectedJsTreeRef = $(selectedJsTree).jstree(true);
    
    // User can't move more than 250 to Selected list . 
    var availableSelCount = availableJsTreeRef.get_selected().length;
    var selectedCount = 0;
    $(selectedJsTreeRef.get_json()).each(function(i, selectedJsonobject) {
      $(selectedJsonobject.children).each(function(k, selchildobj) {
        selectedCount ++;
      });
    });
    
    var unCheckCount = selectedCount - (cs.data.maxRecordCount - availableSelCount);
    if(unCheckCount > 0 ){
      var msgModal = $(cs.data.selectedItemsCountMsgDivID).modal();
      msgModal.find('.modal-body').text((cs.data.selectedMaxOutMessage).replace("<UNCHECK_COUNT>", unCheckCount)).end();
      return false;
    }
    
    //Read Available Js Tree
    //Read include selected jS Tree Nodes
    var AvailableNodes = [];
    var availableCount = 0;
    var availableJson = availableJsTreeRef.get_json();
    $(availableJson).each(function(i, availableJsonobject) {
      /* Don't include selected nodes*/
      if(availableJsonobject.state.selected == false){
        AvailableNodes.push({"id" : availableJsonobject.id, 
                            "text" : availableJsonobject.text,
                            "children" : []});
        
      }  
      availableCount ++;
    });
    
    /*Search for parent node, if not create it*/
    var selectedNodes = [];
    var selectedChildNodes = [];
    
    var parentNodeObj = selectedJsTreeRef.get_node(classificationVal);
    if(!parentNodeObj){
      //Creating parent node
      parentNodeObj = selectedJsTreeRef.create_node("#", {"id":classificationVal,"text":classificationVal});
    }
    //Read selected Js tree
    var selectedJson = selectedJsTreeRef.get_json();
    $(selectedJson).each(function(i, selectedJsonobject) {
      selectedChildNodes = [];
      $(selectedJsonobject.children).each(function(k, selchildobj) {
        selectedChildNodes.push({"id":selchildobj.id, "text": selchildobj.text});
      });
      
        if(selectedJsonobject.text == classificationVal){
          $(availableJsTreeRef.get_selected(true)).each(function(i,obj){
            selectedChildNodes.push({"id":obj.id, "text": obj.text});
          });
        }
        selectedNodes.push({"id" : selectedJsonobject.id, 
          "text" : selectedJsonobject.text,
          "children" : selectedChildNodes});
    });
    
    var data = {"leftPanel" : AvailableNodes,
            "rightPanel" : selectedNodes};
    /**
     * Remove search criteria if user is moving all nodes
     */
    if(availableCount == availableSelCount && $(cs.data.searchUDFInputBox).val().length > 2 ){
      $(cs.data.searchUDFInputBox).val("");
      $(cs.data.searchUDFInputBox).keyup();
    }
    else{
      //Destroy and reload 
      $(availableJsTree).jstree("destroy");
      cs.setupAvailableJsTree(cs, data, availableJsTree);
    }
    
    $(selectedJsTree).jstree("destroy");
    cs.setupSelectedJsTree(cs, data, selectedJsTree);
    cs.callPatientCountAjax(selectedNodes, cs);
  },
  /**
   * Method moves selected nodes right to left
   */
  moveNodesToLeft : function(availableJsTree, selectedJsTree, classificationVal, cs){
    var availableJsTreeRef = $(availableJsTree).jstree(true);
    var selectedJsTreeRef = $(selectedJsTree).jstree(true);
    
    /*Read selected js Tree*/
    var selectedNodes = [];
    var selectedChildNodes = [];
    var selectedNodesToMoveRight = [];
    
    var selectedJson = selectedJsTreeRef.get_json();
    $(selectedJson).each(function(i, selectedJsonobject) {
      selectedChildNodes = [];
     
        $(selectedJsonobject.children).each(function(k, selchildobj) {
          if(selchildobj.state.selected == false){
            selectedChildNodes.push({"id":selchildobj.id, "text": selchildobj.text});
          }
          else{
            /**
             * Move node parent should match with classification drop down value
             * and Node Id should not be in out of stock ids list
             */
            if(selectedJsonobject.text == classificationVal && $.inArray( selchildobj.id , cs.data.outOfStockIds ) == -1){
              selectedNodesToMoveRight.push({"id":selchildobj.id, "text": selchildobj.text}); 
            }
          }
        });
        
        if(selectedJsonobject.state.selected == false){
          selectedNodes.push({"id" : selectedJsonobject.id, 
            "text" : selectedJsonobject.text,
            "children" : selectedChildNodes});
        }
      
    });
    
    //Read Available Js Tree
    var AvailableNodes = [];
    var availableJson = availableJsTreeRef.get_json();
    $(availableJson).each(function(i, availableJsonobject) {
      AvailableNodes.push({"id" : availableJsonobject.id, 
                            "text" : availableJsonobject.text,
                            "children" : []});
                                         
    });
    $(selectedNodesToMoveRight).each(function(i, availableJsonobject) {
      AvailableNodes.push({"id" : availableJsonobject.id, 
        "text" : availableJsonobject.text,
        "children" : []});
    });
    
    var data = {"leftPanel" : AvailableNodes,
            "rightPanel" : selectedNodes};
    if($(cs.data.searchUDFInputBox).val().length >= 3 ){
      
      $(cs.data.searchUDFInputBox).keyup();
    }
    else{
      $(cs.data.searchUDFInputBox).val("");
      $(availableJsTree).jstree("destroy");
      cs.setupAvailableJsTree(cs, data, availableJsTree);
    }
    
    //Destroy and reload 
    $(selectedJsTree).jstree("destroy");
    cs.setupSelectedJsTree(cs, data, selectedJsTree);
    cs.callPatientCountAjax(selectedNodes, cs);
  },
  callPatientCountAjax : function(selectedNodes, cs) {
    var cs = this;
    var selectedNodesJson = [];
   
    $(selectedNodes).each(function(i, selectedParentobject) {
      $(selectedParentobject.children).each(function(k, selchildobj) {
        selectedNodesJson.push({"id": selchildobj.id,"text": selchildobj.text, "topValue":selectedParentobject.id});
      });
    }); 
    createTemplateJs.updatePatientCountAjax(cs.data.GET_PROVIDER_COUNT_UDFs, "&selectedUDFs=" + encodeURIComponent(JSON.stringify(selectedNodesJson)));
  },
  dataSetChangeCallBack : function(cs, data){
    //Destroy and reload 
    $(cs.data.availableDiv).jstree("destroy");
    $(cs.data.selectedDiv).jstree("destroy");
    
    cs.updateOutOfStockNodes(cs, data.rightPanel);
    cs.setupAvailableJsTree(cs, data, cs.data.availableDiv);
    cs.setupSelectedJsTree(cs, data, cs.data.selectedDiv);
  },
  /**
   * Method to identify out stock nodes
   */
  updateOutOfStockNodes : function(cs, rightPanelData){
    var outOfStockIds = [];
    $.each(rightPanelData, function(i) {
      $.each(rightPanelData[i].children, function(j, itrObj){
        if (itrObj.grayOut) {
          outOfStockIds.push(itrObj.id);
        }
      });
    });
    cs.data.outOfStockIds = outOfStockIds;
  },
  addGrayColorText : function(cs){
    jQuery.each(cs.data.outOfStockIds, function(index,value) {
      $('#'+value).addClass('ln-ppm-jsTreetext-light-grey');
    });
  },
  showDefaultLeftPanelText : function(jsTreeNodeId, placeHolderdivId, cs) {
    /*alert($(jsTreeNodeCheck)+'----->'+$(jsTreeNodeCheck).length)*/
    var jsTreeNodeCheck = (jsTreeNodeId)+" > ul >li";
    if($(jsTreeNodeCheck).length > 0)  {
      $(placeHolderdivId).hide();
      $(cs.data.noMatchFound).hide();
    }
    else  {
      if($(cs.data.searchUDFInputBox).val().length >= 3 ){
        $(placeHolderdivId).hide();
        $(cs.data.noMatchFound).show();
      }
      else{
        $(cs.data.noMatchFound).hide();
        $(placeHolderdivId).show();
        $(placeHolderdivId).text("No " + $(cs.data.udfClassDefault).text() + " available");
        
        
      }
      
    }
  },
  showDefaultRightPaneText : function(jsTreeNodeId, placeHolderdivId) {
    var cs = this;
    /*alert($(jsTreeNodeCheck)+'----->'+$(jsTreeNodeCheck).length)*/
    var jsTreeNodeCheck = (jsTreeNodeId)+" > ul >li";
    if($(jsTreeNodeCheck).length > 0)  {
      $(placeHolderdivId).hide();
    }
    else  {
      $(placeHolderdivId).show();
    }
  },
  enableOrDisableSelectAllCheckBoxOfAvailable : function(jsTreeNodeId, availableCheckbox){
    //Disable/Enable select check box
 
    var AvailableDiv = $((jsTreeNodeId + " > ul >li"));
    if(AvailableDiv.length > 0)  {
      $(availableCheckbox).prop('disabled', false);
    }
    else{
      $(availableCheckbox).prop('disabled', true);
    }

  },
  enableOrDisableSelectAllCheckBoxOfSelected : function(jsTreeNodeId, selectedCheckbox){
    
    var selectedDiv = $((jsTreeNodeId +  "> ul >li"));
    if(selectedDiv.length > 0)  {
      $(selectedCheckbox).prop('disabled', false);
    }
    else{
      $(selectedCheckbox).prop('disabled', true);
    }
  },
  /*Method to handle when user selected all check boxes manually , Select All check box
  //shold get selected automatically.
  */
  bindLeftCheckBoxEvent : function(availableJsTree, selectAllAvailableCheckBox, moveRightButton){
   
    var selectedArrayLength = $(availableJsTree).jstree(true).get_selected(false).length;
    var allNodesArrayLength =  $(availableJsTree).jstree(true).get_json('#', { 'flat': true }).length;

      if(selectedArrayLength > 0 && selectedArrayLength  == allNodesArrayLength){
        $(selectAllAvailableCheckBox).prop('checked', true);
      }
      else{
        $(selectAllAvailableCheckBox).prop('checked', false);
      }
        
    if(selectedArrayLength > 0){
        $(moveRightButton).prop('disabled', false);
      }else{
        $(moveRightButton).prop('disabled', true);
      }

  },
  bindRightCheckBoxEvent : function(selectedJsTree, selectAllSelectedCheckBox, moveLeftButton){
    
    var selectedArrayLength = $(selectedJsTree).jstree(true).get_selected(false).length;
    var allNodesArrayLength =  $(selectedJsTree).jstree(true).get_json('#', { 'flat': true }).length;
    
    if( selectedArrayLength > 0 && selectedArrayLength ==  allNodesArrayLength){
      $(selectAllSelectedCheckBox).prop('checked', true);
    }
    else{
      $(selectAllSelectedCheckBox).prop('checked', false);
    }
    
    if(selectedArrayLength > 0){
        $(moveLeftButton).prop('disabled', false);
      }else{
        $(moveLeftButton).prop('disabled', true);
      }
  }
});