From 22f14a02470cc4b7ebb6e060d37ee4dc35a3f362 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Tue, 5 Oct 2021 15:33:19 +0200
Subject: [PATCH] SSDM-11664 : NG UI & ELN : common table widget

---
 .../components/common/grid/GridController.js  | 55 +++++++++----------
 1 file changed, 26 insertions(+), 29 deletions(-)

diff --git a/openbis_ng_ui/src/js/components/common/grid/GridController.js b/openbis_ng_ui/src/js/components/common/grid/GridController.js
index eeef6f2a59c..aa55ae4f573 100644
--- a/openbis_ng_ui/src/js/components/common/grid/GridController.js
+++ b/openbis_ng_ui/src/js/components/common/grid/GridController.js
@@ -165,8 +165,7 @@ export default class GridController {
   }
 
   async load() {
-    const { columns, loadColumns, rows, loadRows, onLoad } =
-      this.context.getProps()
+    const { columns, loadColumns, rows, loadRows } = this.context.getProps()
 
     if ((rows && loadRows) || (!rows && !loadRows)) {
       throw new Error(
@@ -184,7 +183,7 @@ export default class GridController {
       loading: true
     }))
 
-    const { filters, page, pageSize, sort, sortDirection } =
+    const { filters, page, pageSize, sort, sortDirection, selectedRowId } =
       this.context.getState()
 
     let newRows,
@@ -241,9 +240,7 @@ export default class GridController {
       totalCount: newTotalCount
     }))
 
-    if (onLoad) {
-      onLoad()
-    }
+    this.updateSelectedRow(selectedRowId)
   }
 
   _loadSettings() {
@@ -341,14 +338,27 @@ export default class GridController {
 
   async updateSelectedRow(newSelectedRowId) {
     const { onSelectedRowChange } = this.context.getProps()
-    const { selectedRowId } = this.context.getState()
-
-    if (newSelectedRowId !== selectedRowId) {
-      await this.context.setState(() => ({
-        selectedRowId: newSelectedRowId
-      }))
-      if (onSelectedRowChange) {
-        onSelectedRowChange(this.getSelectedRow())
+    const { rows, selectedRow } = this.context.getState()
+
+    let newSelectedRow = null
+
+    if (newSelectedRowId !== null && newSelectedRowId !== undefined) {
+      const visible =
+        _.findIndex(rows, row => row.id === newSelectedRowId) !== -1
+      newSelectedRow = {
+        id: newSelectedRowId,
+        visible
+      }
+    }
+
+    await this.context.setState(() => ({
+      selectedRowId: newSelectedRowId,
+      selectedRow: newSelectedRow
+    }))
+
+    if (onSelectedRowChange) {
+      if (!_.isEqual(selectedRow, newSelectedRow)) {
+        onSelectedRowChange(newSelectedRow)
       }
     }
   }
@@ -562,21 +572,8 @@ export default class GridController {
   }
 
   getSelectedRow() {
-    const { selectedRowId, rows, allRows } = this.context.getState()
-
-    if (selectedRowId !== null && selectedRowId !== undefined) {
-      const selectedRow = _.find(allRows, row => row.id === selectedRowId)
-      if (selectedRow !== undefined) {
-        const visible =
-          _.findIndex(rows, row => row.id === selectedRowId) !== -1
-        return {
-          id: selectedRow.id,
-          visible
-        }
-      }
-    }
-
-    return null
+    const { selectedRow } = this.context.getState()
+    return selectedRow
   }
 
   getTotalCount() {
-- 
GitLab