From 0df90c7962196865755f19a1a942347b6bdbdb71 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Tue, 15 Oct 2019 15:19:58 +0300
Subject: [PATCH] Object list: custom component for events

---
 .../facet_results/ObjectListCollapsible.js    | 61 +++++++++++--------
 .../facet_results/ObjectListItem.js           |  4 +-
 .../facet_results/ObjectListItemEvent.js      | 31 +++++++---
 .../components/facet_results/StringList.js    | 11 ----
 4 files changed, 59 insertions(+), 48 deletions(-)

diff --git a/src/client/components/facet_results/ObjectListCollapsible.js b/src/client/components/facet_results/ObjectListCollapsible.js
index 9ad8acac..3ba05b88 100644
--- a/src/client/components/facet_results/ObjectListCollapsible.js
+++ b/src/client/components/facet_results/ObjectListCollapsible.js
@@ -5,6 +5,7 @@ import Collapse from '@material-ui/core/Collapse';
 import { ISOStringToDate } from './Dates';
 import { orderBy, has } from 'lodash';
 import ObjectListItem from './ObjectListItem';
+import ObjectListItemEvent from './ObjectListItemEvent';
 
 const styles = () => ({
   valueList: {
@@ -24,6 +25,9 @@ const styles = () => ({
 
 const ObjectList = props => {
 
+  const { sortValues, makeLink, externalLink, linkAsButton, columnId } = props;
+  let { data } = props;
+
   const sortList = data => {
     if (has(props, 'columnId') && props.columnId.endsWith('Timespan')) {
       data = sortValues
@@ -43,8 +47,33 @@ const ObjectList = props => {
     return data;
   };
 
-  const { sortValues, makeLink, externalLink, linkAsButton } = props;
-  let { data } = props;
+  const renderItem = ({ collapsed, itemData, isFirstValue = false }) => {
+    if (columnId === 'event') {
+      return (
+        <React.Fragment>
+          <ObjectListItemEvent
+            data={itemData}
+            isFirstValue={isFirstValue}
+          />
+          {collapsed && <span> ...</span>}
+        </React.Fragment>
+
+      );
+    } else {
+      return(
+        <React.Fragment>
+          <ObjectListItem
+            data={itemData}
+            makeLink={makeLink}
+            externalLink={externalLink}
+            linkAsButton={linkAsButton}
+          />
+          {collapsed && <span> ...</span>}
+        </React.Fragment>
+      );
+    }
+  };
+
   if (data == null || data === '-') {
     return '-';
   }
@@ -52,26 +81,12 @@ const ObjectList = props => {
     data = sortList(data);
     return (
       <React.Fragment>
-        {!props.expanded &&
-          <ObjectListItem
-            data={data[0]}
-            makeLink={makeLink}
-            externalLink={externalLink}
-            linkAsButton={linkAsButton}
-            collapsed={true}
-          />
-        }
+        {!props.expanded && renderItem({ collapsed: true, itemData: data[0], isFirstValue: true })}
         <Collapse in={props.expanded} timeout="auto" unmountOnExit>
           <ul className={props.classes.valueList}>
             {data.map(item =>
               <li key={item.id}>
-                <ObjectListItem
-                  data={item}
-                  makeLink={makeLink}
-                  externalLink={externalLink}
-                  linkAsButton={linkAsButton}
-                  collapsed={false}
-                />
+                {renderItem({ collapsed: false, itemData: item })}
               </li>
             )}
           </ul>
@@ -79,15 +94,7 @@ const ObjectList = props => {
       </React.Fragment>
     );
   } else {
-    return (
-      <ObjectListItem
-        data={data}
-        makeLink={makeLink}
-        externalLink={externalLink}
-        linkAsButton={linkAsButton}
-        collapsed={false}
-      />
-    );
+    return renderItem({ collapsed: false, itemData: data, isFirstValue: true });
   }
 };
 
diff --git a/src/client/components/facet_results/ObjectListItem.js b/src/client/components/facet_results/ObjectListItem.js
index cff7412a..167ba96d 100644
--- a/src/client/components/facet_results/ObjectListItem.js
+++ b/src/client/components/facet_results/ObjectListItem.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
 import ObjectListItemLink from './ObjectListItemLink';
 
 const ObjectListItem = props => {
-  const { data, makeLink, externalLink, linkAsButton, collapsed } = props;
+  const { data, makeLink, externalLink, linkAsButton } = props;
   let label = Array.isArray(data.prefLabel) ? data.prefLabel[0] : data.prefLabel;
   return (
     <React.Fragment>
@@ -16,7 +16,6 @@ const ObjectListItem = props => {
           linkAsButton={linkAsButton}
         />
       }
-      {collapsed && ' ...'}
     </React.Fragment>
   );
 };
@@ -26,7 +25,6 @@ ObjectListItem.propTypes = {
   makeLink: PropTypes.bool.isRequired,
   externalLink: PropTypes.bool.isRequired,
   linkAsButton: PropTypes.bool,
-  collapsed: PropTypes.bool.isRequired
 };
 
 export default ObjectListItem;
diff --git a/src/client/components/facet_results/ObjectListItemEvent.js b/src/client/components/facet_results/ObjectListItemEvent.js
index 2725fbb4..298348dc 100644
--- a/src/client/components/facet_results/ObjectListItemEvent.js
+++ b/src/client/components/facet_results/ObjectListItemEvent.js
@@ -1,30 +1,47 @@
 import React from 'react';
 import PropTypes from 'prop-types';
+import { withStyles } from '@material-ui/core/styles';
 import ObjectListItemLink from './ObjectListItemLink';
 
+
+const styles = () => ({
+  dateContainer: {
+    width: 180,
+    display: 'inline-block'
+  }
+});
+
 const ObjectListItemEvent = props => {
-  const { data, collapsed } = props;
+  const { data, isFirstValue } = props;
   let label = Array.isArray(data.prefLabel) ? data.prefLabel[0] : data.prefLabel;
   return (
     <React.Fragment>
+      <span className={isFirstValue ? null : props.classes.dateContainer}>
+        {data.date == null ? 'No date ' : `${data.date} `}
+      </span>
       <ObjectListItemLink
         data={data}
         label={label}
+        externalLink={false}
       />
       {data.observedOwner &&
         <React.Fragment>
           {': '}
-          {data.observedOwner}
+          <ObjectListItemLink
+            data={data.observedOwner}
+            label={data.observedOwner.prefLabel}
+            externalLink={false}
+          />
         </React.Fragment>
       }
-      {collapsed && ' ...'}
     </React.Fragment>
   );
 };
 
-ObjectListItemEvent.PropTypes = {
-  data: PropTypes.bool.isRequired,
-  collapsed: PropTypes.bool.isRequired
+ObjectListItemEvent.propTypes = {
+  classes: PropTypes.object.isRequired,
+  data: PropTypes.object.isRequired,
+  isFirstValue: PropTypes.bool.isRequired
 };
 
-export default ObjectListItemEvent;
+export default withStyles(styles)(ObjectListItemEvent);
diff --git a/src/client/components/facet_results/StringList.js b/src/client/components/facet_results/StringList.js
index 9e0e9808..2c256b45 100644
--- a/src/client/components/facet_results/StringList.js
+++ b/src/client/components/facet_results/StringList.js
@@ -2,10 +2,6 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { withStyles } from '@material-ui/core/styles';
 import Collapse from '@material-ui/core/Collapse';
-// import Button from '@material-ui/core/Button';
-// import { ISOStringToDate } from './Dates';
-// import { Link } from 'react-router-dom';
-// import { orderBy, has } from 'lodash';
 
 const styles = () => ({
   valueList: {
@@ -16,13 +12,6 @@ const styles = () => ({
   valueListNoBullets: {
     listStyle: 'none',
     paddingLeft: 0
-  },
-  noDate: {
-    marginRight: 20
-  },
-  stringContainer: {
-    maxHeight: 200,
-    overflow: 'auto'
   }
 });
 
-- 
GitLab