From c5a49f46d7bc787023f0232514b16b14169c7c04 Mon Sep 17 00:00:00 2001
From: parkera <parkera>
Date: Tue, 7 Jun 2016 12:51:41 +0000
Subject: [PATCH] SSDM-3632 : Batch delete on sample table - add on sample
 links

SVN: 36642
---
 .../js/views/DataGrid/DataGridController.js   |  7 ++--
 .../js/views/SampleForm/widgets/LinksView.js  | 12 +++++--
 .../webapps/eln-lims/html/lib/grid/js/Grid.js | 32 ++++++++++++++++++-
 3 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
index c6ea3fdad5f..1b8cfc13b10 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js
@@ -24,7 +24,7 @@ function DataGridController(title, columns, data, rowClickEventHandler, showAllC
 		window.alert("[TO-DELETE] Empty configKey during the table init, this should never happen, tell the developers.");
 	}
 	
-	this.init = function($container) {
+	this.init = function($container, extraOptions) {
 		var webAppId = "ELN-LIMS";
 		mainController.serverFacade.openbisServer.getWebAppSettings(webAppId, function(response) {
 			var settings = response.result.settings;
@@ -53,9 +53,12 @@ function DataGridController(title, columns, data, rowClickEventHandler, showAllC
 			if(rowClickEventHandler) {
 				_this._grid.addRowClickListener(rowClickEventHandler);
 			}
+			if(extraOptions) {
+				_this._grid.addExtraOptions(extraOptions);
+			}
+			
 			_this._dataGridModel = new DataGridModel(title, columns, data, rowClickEventHandler, _this._grid.render(), isMultiselectable);
 			_this._dataGridView = new DataGridView(this, _this._dataGridModel);
-			
 			_this._dataGridView.repaint($container);
 		});	
 	}
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
index 08b0dfde97b..2dede65c60a 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js
@@ -355,8 +355,16 @@ function LinksView(linksController, linksModel) {
 				$container.empty().hide();
 			}
 			
-			var dataGrid = SampleDataGridUtil.getSampleDataGrid(sampleTypeCode, samples, rowClick, null, null, null, true, true);
-			dataGrid.init($gridContainer);
+			var extraOptions = [];
+			extraOptions.push({ name : "Add all", action : function(selected) {
+				for(var sIdx = 0; sIdx < selected.length; sIdx++) {
+					linksController.addSample(selected[sIdx]);
+				}
+				$container.empty().hide();
+			}});
+			
+			var dataGrid = SampleDataGridUtil.getSampleDataGrid(sampleTypeCode, samples, rowClick, null, null, null, true, true, true);
+			dataGrid.init($gridContainer, extraOptions);
 		}
 		
 		//Check Cache and Show Table
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
index 452c12623d5..78cf54ae496 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js
@@ -78,7 +78,10 @@ $.extend(Grid.prototype, {
 								}
 							}
 						}
-					});		
+					});
+					$checkbox.click(function(e) {
+						e.stopPropagation();
+					});
 					return $checkbox;
 				}
 		});
@@ -195,6 +198,10 @@ $.extend(Grid.prototype, {
 		return this.columns;
 	},
 
+	addExtraOptions : function(extraOptions) {
+		this.extraOptions = extraOptions;
+	},
+	
 	renderDropDownOptions: function() {
 		var thisGrid = this;
 		var columnList = thisGrid.panel.find(".optionsDropdown").find("ul");
@@ -263,6 +270,29 @@ $.extend(Grid.prototype, {
 		
 		columnList.append(itemARAC);
 		
+		if(this.extraOptions) {
+			for(var oIdx = 0; oIdx < this.extraOptions.length; oIdx++) {
+				var option = this.extraOptions[oIdx];
+				var extraLabel = $("<label>", { style : 'white-space: nowrap; cursor:pointer;' })
+									.attr("role", "menuitem")
+									.append(option.name);
+
+				var extraItem = $("<li>")
+							.attr("role", "presentation")
+							.attr("style", "margin-left: 5px; margin-right: 5px;")
+							.append(extraLabel);
+				
+				var getClick = function(option) {
+					return function() {
+						option.action(thisGrid.getSelected());
+					}
+				}
+				
+				extraItem.click(getClick(option));
+				
+				columnList.append(extraItem);
+			}
+		}
 	},
 	
 	exportTSV : function(isAllRowsOrVisible, isAllColumnsOrVisible) {
-- 
GitLab