From d6a6eb1e5987f16fd5cbba9039768bddef95a28d Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Thu, 11 Nov 2021 13:41:23 +0100
Subject: [PATCH] SSDM-11664 : NG UI & ELN : common table widget - move the
 sorting configuration from a column config to grid config

---
 .../components/common/grid/GridController.js  | 17 ++++++-----------
 .../components/tools/common/PluginsGrid.jsx   |  2 +-
 .../components/tools/common/QueriesGrid.jsx   |  2 +-
 .../js/components/types/common/TypesGrid.jsx  |  2 +-
 .../types/common/VocabulariesGrid.jsx         |  2 +-
 .../components/types/form/VocabularyForm.jsx  |  2 +-
 .../js/components/users/common/RolesGrid.jsx  | 19 ++++++++++++++-----
 .../users/common/UserGroupsGrid.jsx           |  2 +-
 .../js/components/users/common/UsersGrid.jsx  |  2 +-
 9 files changed, 27 insertions(+), 23 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 2d7f14fce10..7cbb895a66d 100644
--- a/openbis_ng_ui/src/js/components/common/grid/GridController.js
+++ b/openbis_ng_ui/src/js/components/common/grid/GridController.js
@@ -13,6 +13,8 @@ export default class GridController {
   }
 
   init(context) {
+    const props = context.getProps()
+
     context.initState({
       loaded: false,
       loading: false,
@@ -29,8 +31,10 @@ export default class GridController {
       allRows: [],
       selectedRow: null,
       multiselectedRows: {},
-      sort: null,
-      sortDirection: null,
+      sort: props.sort,
+      sortDirection: props.sortDirection
+        ? props.sortDirection
+        : GridSortingOptions.ASC,
       totalCount: 0,
       exportOptions: {
         columns: GridExportOptions.VISIBLE_COLUMNS,
@@ -127,15 +131,6 @@ export default class GridController {
       newState.columnsVisibility = newColumnsVisibility
       newState.columnsSorting = newColumnsSorting
 
-      if (!state.loaded && !settings) {
-        newState.allColumns.forEach(column => {
-          if (column.sort) {
-            newState.sort = column.name
-            newState.sortDirection = column.sort
-          }
-        })
-      }
-
       newState.allRows = result.rows
       newState.filteredRows = this._filterRows(
         newState.allRows,
diff --git a/openbis_ng_ui/src/js/components/tools/common/PluginsGrid.jsx b/openbis_ng_ui/src/js/components/tools/common/PluginsGrid.jsx
index b40ff28f385..e87d2f38a7e 100644
--- a/openbis_ng_ui/src/js/components/tools/common/PluginsGrid.jsx
+++ b/openbis_ng_ui/src/js/components/tools/common/PluginsGrid.jsx
@@ -25,11 +25,11 @@ class PluginsGrid extends React.PureComponent {
         id={id}
         controllerRef={controllerRef}
         header={this.getHeader()}
+        sort='name'
         columns={[
           {
             name: 'name',
             label: messages.get(messages.NAME),
-            sort: 'asc',
             getValue: ({ row }) => row.name.value,
             renderValue: ({ row }) => {
               return (
diff --git a/openbis_ng_ui/src/js/components/tools/common/QueriesGrid.jsx b/openbis_ng_ui/src/js/components/tools/common/QueriesGrid.jsx
index ec2cdb9ce16..b64fbdc9ada 100644
--- a/openbis_ng_ui/src/js/components/tools/common/QueriesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/tools/common/QueriesGrid.jsx
@@ -18,11 +18,11 @@ class QueriesGrid extends React.PureComponent {
         id={id}
         controllerRef={controllerRef}
         header={messages.get(messages.QUERIES)}
+        sort='name'
         columns={[
           {
             name: 'name',
             label: messages.get(messages.NAME),
-            sort: 'asc',
             getValue: ({ row }) => row.name.value,
             renderValue: ({ value }) => {
               return <QueryLink queryName={value} />
diff --git a/openbis_ng_ui/src/js/components/types/common/TypesGrid.jsx b/openbis_ng_ui/src/js/components/types/common/TypesGrid.jsx
index 0c2f210994e..c9c2d58a459 100644
--- a/openbis_ng_ui/src/js/components/types/common/TypesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/TypesGrid.jsx
@@ -20,6 +20,7 @@ class TypesGrid extends React.PureComponent {
         header={this.getHeader()}
         columns={this.getColumns()}
         rows={rows}
+        sort='code'
         selectable={true}
         selectedRowId={selectedRowId}
         onSelectedRowChange={onSelectedRowChange}
@@ -48,7 +49,6 @@ class TypesGrid extends React.PureComponent {
     columns.push({
       name: 'code',
       label: messages.get(messages.CODE),
-      sort: 'asc',
       getValue: ({ row }) => row.code,
       renderValue: ({ row }) => {
         return <TypeLink typeCode={row.code} typeKind={kind} />
diff --git a/openbis_ng_ui/src/js/components/types/common/VocabulariesGrid.jsx b/openbis_ng_ui/src/js/components/types/common/VocabulariesGrid.jsx
index b0075b5f40d..ab7ee679c7a 100644
--- a/openbis_ng_ui/src/js/components/types/common/VocabulariesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/VocabulariesGrid.jsx
@@ -20,7 +20,6 @@ class VocabulariesGrid extends React.PureComponent {
           {
             name: 'code',
             label: messages.get(messages.CODE),
-            sort: 'asc',
             getValue: ({ row }) => row.code,
             renderValue: ({ row }) => {
               return <VocabularyLink vocabularyCode={row.code} />
@@ -38,6 +37,7 @@ class VocabulariesGrid extends React.PureComponent {
           }
         ]}
         rows={rows}
+        sort='code'
         selectable={true}
         selectedRowId={selectedRowId}
         onSelectedRowChange={onSelectedRowChange}
diff --git a/openbis_ng_ui/src/js/components/types/form/VocabularyForm.jsx b/openbis_ng_ui/src/js/components/types/form/VocabularyForm.jsx
index 479e6cc4f83..dd6985f7036 100644
--- a/openbis_ng_ui/src/js/components/types/form/VocabularyForm.jsx
+++ b/openbis_ng_ui/src/js/components/types/form/VocabularyForm.jsx
@@ -23,7 +23,6 @@ const columns = [
   {
     name: 'code',
     label: messages.get(messages.CODE),
-    sort: 'asc',
     getValue: ({ row }) => row.code.value
   },
   {
@@ -117,6 +116,7 @@ class VocabularyForm extends React.PureComponent {
           header={messages.get(messages.TERMS)}
           columns={columns}
           rows={terms}
+          sort='code'
           selectable={true}
           selectedRowId={
             selection && selection.type === VocabularyFormSelectionType.TERM
diff --git a/openbis_ng_ui/src/js/components/users/common/RolesGrid.jsx b/openbis_ng_ui/src/js/components/users/common/RolesGrid.jsx
index fdafcdffdef..175a1b9602d 100644
--- a/openbis_ng_ui/src/js/components/users/common/RolesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/users/common/RolesGrid.jsx
@@ -55,6 +55,7 @@ class RolesGrid extends React.PureComponent {
         header={this.getHeader()}
         columns={columns}
         rows={rows}
+        sort={this.getSort()}
         selectable={true}
         selectedRowId={selectedRowId}
         onSelectedRowChange={onSelectedRowChange}
@@ -77,14 +78,25 @@ class RolesGrid extends React.PureComponent {
     return messages.get(message)
   }
 
-  getColumns() {
+  getSort() {
     const { id } = this.props
 
+    if (id === ids.ROLES_OF_USERS_GRID_ID) {
+      return 'user'
+    } else if (id === ids.ROLES_OF_GROUPS_GRID_ID) {
+      return 'group'
+    } else if (id === ids.ROLES_OF_USER_GRID_ID) {
+      return 'inheritedFrom'
+    } else if (id === ids.ROLES_OF_GROUP_GRID_ID) {
+      return 'level'
+    }
+  }
+
+  getColumns() {
     return [
       {
         name: 'user',
         label: messages.get(messages.USER),
-        sort: id === ids.ROLES_OF_USERS_GRID_ID ? 'asc' : null,
         getValue: this.getUserValue,
         renderValue: this.renderUserValue,
         compareValue: params => {
@@ -102,7 +114,6 @@ class RolesGrid extends React.PureComponent {
       {
         name: 'group',
         label: messages.get(messages.GROUP),
-        sort: id === ids.ROLES_OF_GROUPS_GRID_ID ? 'asc' : null,
         getValue: this.getGroupValue,
         renderValue: this.renderGroupValue,
         compareValue: params => {
@@ -120,7 +131,6 @@ class RolesGrid extends React.PureComponent {
       {
         name: 'inheritedFrom',
         label: messages.get(messages.INHERITED_FROM),
-        sort: id === ids.ROLES_OF_USER_GRID_ID ? 'asc' : null,
         getValue: this.getInheritedFromValue,
         renderValue: this.renderInheritedFromValue,
         compareValue: params => {
@@ -137,7 +147,6 @@ class RolesGrid extends React.PureComponent {
       {
         name: 'level',
         label: messages.get(messages.LEVEL),
-        sort: id === ids.ROLES_OF_GROUP_GRID_ID ? 'asc' : null,
         getValue: this.getLevelValue,
         renderValue: this.renderLevelValue,
         compareValue: params => {
diff --git a/openbis_ng_ui/src/js/components/users/common/UserGroupsGrid.jsx b/openbis_ng_ui/src/js/components/users/common/UserGroupsGrid.jsx
index 7158fc330f8..6db0a322891 100644
--- a/openbis_ng_ui/src/js/components/users/common/UserGroupsGrid.jsx
+++ b/openbis_ng_ui/src/js/components/users/common/UserGroupsGrid.jsx
@@ -16,11 +16,11 @@ export default class GroupsGrid extends React.PureComponent {
         id={id}
         controllerRef={controllerRef}
         header={messages.get(messages.GROUPS)}
+        sort='code'
         columns={[
           {
             name: 'code',
             label: messages.get(messages.CODE),
-            sort: 'asc',
             getValue: ({ row }) => row.code.value,
             renderValue: ({ value }) => {
               if (value) {
diff --git a/openbis_ng_ui/src/js/components/users/common/UsersGrid.jsx b/openbis_ng_ui/src/js/components/users/common/UsersGrid.jsx
index 9ccf9675f03..97f4a0c49a3 100644
--- a/openbis_ng_ui/src/js/components/users/common/UsersGrid.jsx
+++ b/openbis_ng_ui/src/js/components/users/common/UsersGrid.jsx
@@ -26,11 +26,11 @@ class UsersGrid extends React.PureComponent {
         id={id}
         controllerRef={controllerRef}
         header={messages.get(messages.USERS)}
+        sort='userId'
         columns={[
           {
             name: 'userId',
             label: messages.get(messages.USER_ID),
-            sort: 'asc',
             getValue: ({ row }) => row.userId.value,
             renderValue: ({ value }) => {
               return <UserLink userId={value} />
-- 
GitLab