diff --git a/src/client/actions/index.js b/src/client/actions/index.js index 201dd03059ec8a7e2884e6d3fd72c55675d732ec..2602476ee00bcaa747ec979e467090dcec4007a5 100644 --- a/src/client/actions/index.js +++ b/src/client/actions/index.js @@ -7,6 +7,7 @@ export const UPDATE_RESULTS = 'UPDATE_RESULTS'; export const SORT_RESULTS = 'SORT_RESULTS'; export const UPDATE_PAGE = 'UPDATE_PAGE'; export const FETCH_BY_URI = 'FETCH_BY_URI'; +export const FETCH_BY_URI_FAILED = 'FETCH_BY_URI_FAILED'; export const UPDATE_INSTANCE = 'UPDATE_INSTANCE'; export const FETCH_FACET = 'FETCH_FACET'; export const FETCH_FACET_FAILED = 'FETCH_FACET_FAILED'; @@ -53,6 +54,10 @@ export const fetchByURI = (resultClass, facetClass, uri) => ({ type: FETCH_BY_URI, resultClass, facetClass, uri }); +export const fetchByURIFailed = (resultClass, error, message) => ({ + type: FETCH_RESULTS_FAILED, + resultClass, error, message +}); export const updateInstance = ({ resultClass, instance }) => ({ type: UPDATE_INSTANCE, resultClass, instance diff --git a/src/client/components/LeafletMap.js b/src/client/components/LeafletMap.js index 97998008c6b145812f6d8466f8aeeb4b6b38b827..814c8aa1c276de3a4a83078d9430e73dc52799f0 100644 --- a/src/client/components/LeafletMap.js +++ b/src/client/components/LeafletMap.js @@ -289,23 +289,26 @@ class LeafletMap extends React.Component { } markerOnClick = event => { - this.props.fetchByURI('places', 'manuscripts', event.target.options.id,); + this.props.fetchByURI(this.props.resultClass, this.props.facetClass, event.target.options.id,); }; createPopUpContent(result) { - let popUpTemplate = `<h3><a target="_blank" rel="noopener noreferrer" href=${result.dataProviderUrl}>${result.prefLabel}</a></p></h3>`; + let popUpTemplate = `<h3>${result.prefLabel}</h3>`; + if (has(result, 'dataProviderUrl')) { + popUpTemplate += `<p>Data provider: <a target="_blank" rel="noopener noreferrer" href=${result.dataProviderUrl}>${result.dataProviderUrl}</a></p>`; + } if (has(result, 'sameAs')) { popUpTemplate += `<p>Place authority: <a target="_blank" rel="noopener noreferrer" href=${result.sameAs}>${result.sameAs}</a></p>`; } if (this.props.variant === 'productionPlaces') { popUpTemplate += `<p>Manuscripts produced here:</p>`; - popUpTemplate += this.createManscriptListing(result.manuscript); + popUpTemplate += this.createManuscriptListing(result.manuscript); } return popUpTemplate; } - createManscriptListing(manuscripts) { + createManuscriptListing(manuscripts) { let html = ''; if (Array.isArray(manuscripts)) { manuscripts = orderBy(manuscripts, 'id'); diff --git a/src/client/epics/index.js b/src/client/epics/index.js index 8fa7ba966ad0165e4c6c06bd5f41b5b7a33b3e98..537f65e101193dfd834436eae060148cc0edc0b7 100644 --- a/src/client/epics/index.js +++ b/src/client/epics/index.js @@ -9,6 +9,7 @@ import { FETCH_RESULTS, FETCH_RESULTS_FAILED, FETCH_BY_URI, + FETCH_BY_URI_FAILED, FETCH_FACET, FETCH_FACET_FAILED, //SHOW_ERROR, @@ -79,13 +80,15 @@ const fetchByURIEpic = (action$, state$) => action$.pipe( const requestUrl = `${apiUrl}${resultClass}/instance/${encodeURIComponent(uri)}?${params}`; return ajax.getJSON(requestUrl).pipe( map(response => updateInstance({ resultClass: resultClass, instance: response })), - // catchError(error => of({ - // type: SHOW_ERROR, - // message: { - // text: error.xhr.statusText, - // title: '' - // } - // })) + catchError(error => of({ + type: FETCH_BY_URI_FAILED, + resultClass: resultClass, + error: error, + message: { + text: backendErrorText, + title: 'Error' + } + })) ); }) ); diff --git a/src/client/reducers/error.js b/src/client/reducers/error.js index f469454735e1c40c8862bc791bb868199579ff46..4540a649622ea8a35138e47d636cfd8388439d44 100644 --- a/src/client/reducers/error.js +++ b/src/client/reducers/error.js @@ -2,7 +2,8 @@ import { SHOW_ERROR, FETCH_RESULTS_FAILED, FETCH_PAGINATED_RESULTS_FAILED, - FETCH_FACET_FAILED + FETCH_FACET_FAILED, + FETCH_BY_URI_FAILED, } from '../actions'; export const INITIAL_STATE = { @@ -15,6 +16,7 @@ const error = (state = INITIAL_STATE, action) => { case SHOW_ERROR: case FETCH_RESULTS_FAILED: case FETCH_PAGINATED_RESULTS_FAILED: + case FETCH_BY_URI_FAILED: case FETCH_FACET_FAILED: return { ...state, diff --git a/src/server/sparql/SparqlQueriesPlaces.js b/src/server/sparql/SparqlQueriesPlaces.js index 23853042cadb50e0e140bb25b9d194ddcae0f1db..d7732f21b8f694736bc5c6384187cde66f5f526c 100644 --- a/src/server/sparql/SparqlQueriesPlaces.js +++ b/src/server/sparql/SparqlQueriesPlaces.js @@ -40,6 +40,7 @@ export const allPlacesQuery = ` } OPTIONAL { ?id gvp:placeTypePreferred ?placeType } OPTIONAL { ?id skos:altLabel ?altLabel } + OPTIONAL { ?id mmm-schema:data_provider_url ?dataProviderUrl } OPTIONAL { ?id owl:sameAs ?placeAuthorityURI } } `; @@ -57,7 +58,8 @@ export const placeQuery = ` SELECT ?id ?prefLabel ?sameAs ?dataProviderUrl ?parent__id ?parent__prefLabel ?manuscript__id ?manuscript__dataProviderUrl WHERE { BIND (<PLACE_ID> AS ?id) - ?id skos:prefLabel ?prefLabel . + OPTIONAL { ?id skos:prefLabel ?prefLabel_ } + BIND(COALESCE(?prefLabel_, ?id) AS ?prefLabel) OPTIONAL { ?id gvp:broaderPreferred ?parent__id . ?parent__id skos:prefLabel ?parent__prefLabel .