From afef4732411783cb93cbb093c8bed05729754df5 Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Wed, 18 Dec 2024 22:19:47 +0100
Subject: [PATCH 1/6] [SearchMap] added total points length display in selected
 points list

---
 src/pages/maps/SearchMap.js | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/pages/maps/SearchMap.js b/src/pages/maps/SearchMap.js
index 7a3a913..bdb249c 100644
--- a/src/pages/maps/SearchMap.js
+++ b/src/pages/maps/SearchMap.js
@@ -639,6 +639,19 @@ const SearchMap = ({
     return points;
   };
 
+  const getPoints = () => {
+    const pointsSource = map.getLayers().item(getLayerIndex('queryResults')).getSource();
+    const features = pointsSource.getFeatures();
+    if (!features) {
+      return [];
+    }
+    const points = [];
+    features.forEach((feature) => {
+      points.push(feature.getProperties());
+    });
+    return points;
+  };
+
   // Unselect a single point. Remove it from map display and from selected points ids list.
   const unselectPoint = (id, source) => {
     let newSelectedPointsIds = selectedPointsIds;
@@ -722,6 +735,7 @@ const SearchMap = ({
     };
 
     let selectedPointsList;
+    let totalPoints = getPoints();
     let selectedPoints = getSelectedPoints();
     if (selectedPoints.length === 0) {
       selectedPointsList = <p>{t('maps:selectedPointsList.empty')}</p>;
@@ -734,7 +748,8 @@ const SearchMap = ({
         <EuiFlexGroup direction={'column'}>
           <EuiTitle size="s">
             <p>
-              {t('maps:selectedPointsList.title')} ({selectedPoints.length})
+              {t('maps:selectedPointsList.title')} ({selectedPoints.length} /{' '}
+              {totalPoints.length})
             </p>
           </EuiTitle>
           <EuiFlexGroup direction={'column'} style={styles.selectedPointsList}>
-- 
GitLab


From 738b3386516d98ec141c8aa8b9f248559a5b3b69 Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Wed, 18 Dec 2024 22:23:41 +0100
Subject: [PATCH 2/6] [SearchMap] Added a disable attribute on empty selection
 button

---
 src/pages/maps/SearchMap.js | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/pages/maps/SearchMap.js b/src/pages/maps/SearchMap.js
index bdb249c..709cbd3 100644
--- a/src/pages/maps/SearchMap.js
+++ b/src/pages/maps/SearchMap.js
@@ -851,6 +851,8 @@ const SearchMap = ({
                   <EuiButton
                     onClick={() => unselectPoints()}
                     style={styles.unselectAllButton}
+                    color={'accent'}
+                    disabled={selectedPointsIds.length === 0}
                   >
                     {t('maps:layersTable.selectionTool.unselectAll')}
                   </EuiButton>
-- 
GitLab


From 08a4d10a2ed3c1251f0c321255ee641c3e426393 Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Thu, 19 Dec 2024 09:15:11 +0100
Subject: [PATCH 3/6] [ResultsTable] Replaced default fields used when user has
 none

---
 src/pages/results/ResultsTableMUI.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/pages/results/ResultsTableMUI.js b/src/pages/results/ResultsTableMUI.js
index f3eb2c7..b34d07e 100644
--- a/src/pages/results/ResultsTableMUI.js
+++ b/src/pages/results/ResultsTableMUI.js
@@ -44,9 +44,10 @@ const ResultsTableMUI = ({
       const userStdFieldsIds = await fetchUserFieldsDisplaySettings(
         sessionStorage.getItem('userId')
       );
+      const defaultStdFieldsIds = [1, 20, 36, 9, 31, 13];
       // TODO replace hard-coded array by gatekeeper fetch on default settings
       // If no userStdFields, use system default ones.
-      setUserFieldsIds(userStdFieldsIds || [1]);
+      setUserFieldsIds(userStdFieldsIds || defaultStdFieldsIds);
     };
     fetchData();
   }, [searchResults]);
-- 
GitLab


From 2da3a2a4c246661a093688973c60d0bec810132d Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Thu, 19 Dec 2024 09:41:19 +0100
Subject: [PATCH 4/6] [ResultsTableMUI] added a way to display arrays first
 element when possible

---
 src/pages/results/ResultsTableMUI.js | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/pages/results/ResultsTableMUI.js b/src/pages/results/ResultsTableMUI.js
index b34d07e..6678fa4 100644
--- a/src/pages/results/ResultsTableMUI.js
+++ b/src/pages/results/ResultsTableMUI.js
@@ -76,7 +76,14 @@ const ResultsTableMUI = ({
 
   // Returns value from JSON obj associated to key string.
   const getValueByPath = (obj, path) => {
-    return path.split('.').reduce((acc, key) => acc && acc[key], obj);
+    return path.split('.').reduce((acc, key) => {
+      if (Array.isArray(acc)) {
+        // For objects with cardinality, defaults to the first element of the array
+        // TODO add a way to view other elements of the array when possible.
+        acc = acc[0];
+      }
+      return acc && acc[key];
+    }, obj);
   };
 
   const rows = useMemo(() => {
-- 
GitLab


From 053c45275253c4c555ca50375f9ec9024d7cf584 Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Thu, 19 Dec 2024 09:45:23 +0100
Subject: [PATCH 5/6] [Profile/UserFieldsDisplaySettings] removed now useless
 disable attribute on some fields

---
 src/pages/profile/UserFieldsDisplaySettings.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/pages/profile/UserFieldsDisplaySettings.js b/src/pages/profile/UserFieldsDisplaySettings.js
index 575ea84..2984427 100644
--- a/src/pages/profile/UserFieldsDisplaySettings.js
+++ b/src/pages/profile/UserFieldsDisplaySettings.js
@@ -74,7 +74,6 @@ const UserFieldsDisplaySettings = ({ userSettings, setUserSettings, publicFields
           id: field.id,
           label: buildFieldName(field.field_name),
           checked: isOptionChecked(field.id),
-          disabled: field.field_type === 'List',
           toolTipContent: field.definition_and_comment,
           toolTipProps: { position: 'bottom' },
         });
-- 
GitLab


From 99dd6b2da3e8e3016256502b95be1f121da24dc3 Mon Sep 17 00:00:00 2001
From: rbisson <remi.bisson@inrae.fr>
Date: Thu, 19 Dec 2024 10:36:33 +0100
Subject: [PATCH 6/6] [ResultsTableMUI] added width limit and text truncation
 on columns ; now sorting columns alphabetically

---
 src/pages/results/ResultsTableMUI.js | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/pages/results/ResultsTableMUI.js b/src/pages/results/ResultsTableMUI.js
index 6678fa4..1a7b22b 100644
--- a/src/pages/results/ResultsTableMUI.js
+++ b/src/pages/results/ResultsTableMUI.js
@@ -68,9 +68,25 @@ const ResultsTableMUI = ({
       dataColumns.push({
         name: publicField.field_name,
         label: buildFieldName(publicField.field_name),
-        options: { display: userFieldsIds.includes(publicField.id) },
+        options: {
+          display: userFieldsIds.includes(publicField.id),
+          customBodyRenderLite: (dataIndex, rowIndex) => {
+            let value = rows[rowIndex][publicField.field_name];
+            if (value && value.length >= 150) {
+              value = value.substring(0, 150) + ' ...';
+            }
+            return value;
+          },
+          setCellProps: () => ({
+            style: {
+              maxWidth: '350px',
+            },
+          }),
+        },
       });
     });
+    // sort columns alphabetically for clarity
+    dataColumns.sort((a, b) => (a.name > b.name ? 1 : -1));
     return dataColumns;
   }, [publicFields, userFieldsIds]);
 
@@ -183,6 +199,10 @@ const ResultsTableMUI = ({
     filter: true,
     filterType: 'textField',
     responsive: 'standard',
+    draggableColumns: {
+      enabled: true,
+      transitionTime: 200,
+    },
     selectableRows: 'multiple',
     selectableRowsOnClick: false,
     rowsSelected: selectedRows,
-- 
GitLab