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