From 0d308a4b975daaf2236db214b852f457f9973dc2 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Tue, 25 Jun 2019 18:45:39 +0200
Subject: [PATCH] SSDM-7594 : NEW openBIS UI - General Template/Infrastructure
 for Tables - Visualisation/Creation/Edit - make it configurable if a column
 is sortable or not

---
 .../src/components/common/grid/Grid.jsx       | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/openbis_ng_ui/src/components/common/grid/Grid.jsx b/openbis_ng_ui/src/components/common/grid/Grid.jsx
index 3a085dd53ec..b97c3324685 100644
--- a/openbis_ng_ui/src/components/common/grid/Grid.jsx
+++ b/openbis_ng_ui/src/components/common/grid/Grid.jsx
@@ -61,10 +61,13 @@ class Grid extends React.Component {
   constructor(props){
     super(props)
 
+    const sortDefault = _.isFunction(props.data) ? false : true
+
     this.columnsArray = props.columns.map(column => ({
       ...column,
       label: column.label || _.upperFirst(column.field),
       render: column.render || (row => _.get(row, column.field)),
+      sort: column.sort === undefined ? sortDefault : Boolean(column.sort)
     }))
     this.columnsMap = _.keyBy(props.columns, 'field')
 
@@ -99,8 +102,7 @@ class Grid extends React.Component {
     }else if(!this.state.loaded){
       this.setState(() => ({
         loaded: true,
-        objects: this.props.data,
-        totalCount: this.props.data.length
+        objects: this.props.data
       }))
     }
   }
@@ -131,9 +133,12 @@ class Grid extends React.Component {
   }
 
   handleSortChange(column){
+    if(!column.sort){
+      return
+    }
     return () => {
       this.setState((prevState) => ({
-        sort: column,
+        sort: column.field,
         sortDirection: prevState.sortDirection === 'asc' ? 'desc' : 'asc'
       }), () => {
         this.load()
@@ -207,16 +212,19 @@ class Grid extends React.Component {
     }
 
     const { classes } = this.props
-    const { page, pageSize, filter, visibleColumns, sort, sortDirection, totalCount } = this.state
+    const { page, pageSize, filter, visibleColumns, sort, sortDirection } = this.state
 
     let pagedObjects = null
+    let totalCount = null
 
     if(_.isFunction(this.props.data)){
       pagedObjects = this.state.objects
+      totalCount = this.state.totalCount
     }else{
       const filteredObjects = this.filter([...this.state.objects])
       const sortedObjects = this.sort(filteredObjects)
       pagedObjects = this.page(sortedObjects)
+      totalCount = filteredObjects.length
     }
 
     return (
@@ -236,9 +244,9 @@ class Grid extends React.Component {
                     return (
                       <TableCell key={column.field}>
                         <TableSortLabel
-                          active={sort === column.field}
+                          active={column.sort && sort === column.field}
                           direction={sortDirection}
-                          onClick={this.handleSortChange(column.field)}
+                          onClick={this.handleSortChange(column)}
                         >
                           {column.label}
                         </TableSortLabel>
-- 
GitLab