From 09f438c5c78e32b54ff12fd849a941d25687332b Mon Sep 17 00:00:00 2001
From: Esko Ikkala <esko.ikkala@aalto.fi>
Date: Mon, 15 Oct 2018 13:20:31 +0300
Subject: [PATCH] Custom order for owners

---
 src/client/components/ResultTable.js    | 62 ++++++++++++++++++-------
 src/client/containers/MapApp.js         |  3 +-
 src/client/reducers/options.js          |  2 +-
 src/server/sparql/Datasets.js           | 15 +++---
 src/server/sparql/Manuscripts.js        |  3 +-
 src/server/sparql/SparqlSearchEngine.js |  1 +
 6 files changed, 57 insertions(+), 29 deletions(-)

diff --git a/src/client/components/ResultTable.js b/src/client/components/ResultTable.js
index 853365e3..25004fe2 100644
--- a/src/client/components/ResultTable.js
+++ b/src/client/components/ResultTable.js
@@ -74,6 +74,11 @@ const columns = [
     property: 'material',
     desc: 'Material description'
   },
+  {
+    label: 'Owner',
+    property: 'owner',
+    desc: 'Former or current owner description'
+  },
 ];
 
 class ResultTable extends React.Component {
@@ -120,29 +125,47 @@ class ResultTable extends React.Component {
     }
   };
 
-  objectListRenderer = (cell, makeLink) => {
+  objectListRenderer = (cell, makeLink, customSort, ordered) => {
     if (cell == null){
       return '-';
     }
     else if (Array.isArray(cell)) {
-      cell = orderBy(cell, 'prefLabel');
-      return (
-        <ul className={this.props.classes.valueList}>
-          {cell.map((item, i) =>
-            <li key={i}>
-              {makeLink &&
-                <a
-                  target='_blank' rel='noopener noreferrer'
-                  href={item.sdbmLink}
-                >
-                  {item.prefLabel}
-                </a>
-              }
-              {!makeLink && item.prefLabel}
-            </li>
-          )}
-        </ul>
+      if (customSort) {
+        cell.sort((a, b) =>
+        {
+          if (Array.isArray(a.order)) { a.order = a.order[0]; }
+          if (Array.isArray(b.order)) { b.order = b.order[0]; }
+          return a.order - b.order;
+        });
+      } else {
+        cell = orderBy(cell, 'prefLabel');
+      }
+      const listItems = cell.map((item, i) =>
+        <li key={i}>
+          {makeLink &&
+            <a
+              target='_blank' rel='noopener noreferrer'
+              href={item.sdbmLink}
+            >
+              {item.prefLabel}
+            </a>
+          }
+          {!makeLink && item.prefLabel}
+        </li>
       );
+      if (ordered) {
+        return (
+          <ol className={this.props.classes.valueList}>
+            {listItems}
+          </ol>
+        );
+      } else {
+        return (
+          <ul className={this.props.classes.valueList}>
+            {listItems}
+          </ul>
+        );
+      }
     } else if (makeLink) {
       return (
         <a
@@ -227,6 +250,9 @@ class ResultTable extends React.Component {
                     <TableCell>
                       {this.stringListRenderer(row.material)}
                     </TableCell>
+                    <TableCell>
+                      {this.objectListRenderer(row.owner, true, true, true)}
+                    </TableCell>
                   </TableRow>
                 );
               })}
diff --git a/src/client/containers/MapApp.js b/src/client/containers/MapApp.js
index 1e6f74f6..57ae8346 100644
--- a/src/client/containers/MapApp.js
+++ b/src/client/containers/MapApp.js
@@ -153,7 +153,7 @@ let MapApp = (props) => {
 
   let oneColumnView = true;
 
-  console.log(manuscripts)
+  console.log(manuscripts);
   //console.log(place)
 
   let table = '';
@@ -335,7 +335,6 @@ MapApp.propTypes = {
   manuscripts: PropTypes.array,
   creationPlaces: PropTypes.array.isRequired,
   place: PropTypes.object.isRequired,
-  manuscriptsPropertyValues: PropTypes.object.isRequired,
   facet: PropTypes.object.isRequired,
   results: PropTypes.number.isRequired,
   page: PropTypes.number.isRequired,
diff --git a/src/client/reducers/options.js b/src/client/reducers/options.js
index 7cf65d56..217020ce 100644
--- a/src/client/reducers/options.js
+++ b/src/client/reducers/options.js
@@ -5,7 +5,7 @@ import {
 } from '../actions';
 
 const DEFAULT_LANGUAGE = 'en';
-const DEFAULT_RESULT_FORMAT = 'map';
+const DEFAULT_RESULT_FORMAT = 'table';
 const DEFAULT_MAP_MODE = 'cluster';
 
 export const INITIAL_STATE = {
diff --git a/src/server/sparql/Datasets.js b/src/server/sparql/Datasets.js
index 08ba682c..f8320946 100644
--- a/src/server/sparql/Datasets.js
+++ b/src/server/sparql/Datasets.js
@@ -62,13 +62,14 @@ module.exports = {
         OPTIONAL { ?id mmm-schema:manuscript_record ?manuscriptRecord . }
         OPTIONAL { ?id crm:P45_consists_of ?material . }
         OPTIONAL {
-          ?id crm:P51_has_former_or_current_owner ?owner__id .
-          ?owner__id skos:prefLabel ?owner__label .
-          ?rei rdf:subject ?id ;
-               rdf:predicate crm:P51_has_former_or_current_owner ;
-               rdf:object ?owner__id ;
-               mmm-schema:entry ?owner__entry ;
-               mmm-schema:order ?owner__order .
+         ?id crm:P51_has_former_or_current_owner ?owner__id .
+         ?owner__id skos:prefLabel ?owner__prefLabel .
+         ?reifi rdf:subject ?id ;
+              rdf:predicate crm:P51_has_former_or_current_owner ;
+              rdf:object ?owner__id ;
+              mmm-schema:entry ?owner__entry ;
+              mmm-schema:order ?owner__order .
+         BIND(REPLACE(STR(?owner__id), "http://ldf.fi/mmm/person/", "https://sdbm.library.upenn.edu/names/") AS ?owner__sdbmLink)
         }
         ?expression_creation frbroo:R18_created ?id .
         OPTIONAL {
diff --git a/src/server/sparql/Manuscripts.js b/src/server/sparql/Manuscripts.js
index 5ea82087..32d7538f 100644
--- a/src/server/sparql/Manuscripts.js
+++ b/src/server/sparql/Manuscripts.js
@@ -10,11 +10,12 @@ const sparqlSearchEngine = new SparqlSearchEngine();
 
 export const getManuscripts = (page, filterObj) => {
   let { endpoint, manuscriptQuery } = datasetConfig['mmm'];
-  const pageSize = 5;
+  const pageSize = 3;
   manuscriptQuery = manuscriptQuery.replace('<FILTER>', generateFilter(filterObj));
   manuscriptQuery = manuscriptQuery.replace('<PAGE>', `LIMIT ${pageSize} OFFSET ${page * pageSize}`);
   //manuscriptQuery = manuscriptQuery.replace('<ORDER_BY>', `ORDER BY (!BOUND(?orderBy)) ?orderBy`);
   manuscriptQuery = manuscriptQuery.replace('<ORDER_BY>', `ORDER BY ?id`);
+  console.log(manuscriptQuery)
 
   return sparqlSearchEngine.doSearch(manuscriptQuery, endpoint, makeObjectList);
 };
diff --git a/src/server/sparql/SparqlSearchEngine.js b/src/server/sparql/SparqlSearchEngine.js
index e49c217d..80e93fd3 100644
--- a/src/server/sparql/SparqlSearchEngine.js
+++ b/src/server/sparql/SparqlSearchEngine.js
@@ -7,6 +7,7 @@ class SparqlSearchEngine {
     const sparqlApi = new SparqlApi({ endpoint });
     return sparqlApi.selectQuery(sparqlQuery)
       .then((data) => {
+        console.log(data.results.bindings.length)
         if (data.results.bindings.length === 0) {
           return [];
         }
-- 
GitLab