From 86c460d3de481cf2aae1f0e7855fff99c98ffac9 Mon Sep 17 00:00:00 2001 From: anikachurilova Date: Wed, 17 Jan 2024 16:40:48 +0100 Subject: [PATCH] blr: landing page fixes * search for related records only within BLR community * adjust empty search results to absence of search bar * add a new loader placeholder --- .../src/blr-related-works/BlrSearch.js | 60 +++++++++---------- .../components/BlrResultsLoader.js | 19 ++++++ .../blr-related-works/components/NoResults.js | 31 ++-------- .../zenodo_rdm/src/blr-related-works/index.js | 30 ++++------ site/zenodo_rdm/filters.py | 31 ++++++++++ site/zenodo_rdm/views.py | 6 ++ .../zenodo_rdm/records/detail.html | 21 +++++-- 7 files changed, 120 insertions(+), 78 deletions(-) create mode 100644 site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/BlrResultsLoader.js create mode 100644 site/zenodo_rdm/filters.py diff --git a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/BlrSearch.js b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/BlrSearch.js index e454259f..c274aa96 100644 --- a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/BlrSearch.js +++ b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/BlrSearch.js @@ -35,12 +35,13 @@ import { } from "react-searchkit"; import { OverridableContext } from "react-overridable"; import { apiConfig } from "./api/config"; -import { Segment, Container, Header } from "semantic-ui-react"; +import { Segment, Container } from "semantic-ui-react"; import { ResultsGridLayout, ResultsListLayout } from "./components/ResultsLayout"; import { RecordGridItem, RecordListItem } from "./components/RecordItem"; import { FilterContainer, Filter, FilterValues } from "./components/Filter"; import { LayoutSwitchButtons } from "./components/LayoutSwitchButtons"; import { NoResults } from "./components/NoResults"; +import { BlrResultsLoader } from "./components/BlrResultsLoader"; const blrSearchAppID = "blrSearch"; @@ -54,16 +55,17 @@ const overriddenComponents = { [`${blrSearchAppID}.BucketAggregationValues.element`]: FilterValues, [`${blrSearchAppID}.LayoutSwitcher.element`]: LayoutSwitchButtons, [`${blrSearchAppID}.EmptyResults.element`]: NoResults, + [`${blrSearchAppID}.ResultsLoader.element`]: BlrResultsLoader, }; -export const BlrSearch = ({ endpoint, recordDOI, resourceType }) => { +export const BlrSearch = ({ endpoint, recordDOI, resourceType, blrId }) => { const relationType = (resourceType) => resourceType === "Journal article" || resourceType === "Book chapter" ? "ispartof" : "haspart"; const queryString = (relationType, identifier) => - `metadata.related_identifiers.relation_type.id:${relationType} AND metadata.related_identifiers.identifier:"${identifier}"`; + `parent.communities.ids:${blrId} AND metadata.related_identifiers.relation_type.id:${relationType} AND metadata.related_identifiers.identifier:"${identifier}"`; const searchApi = new InvenioSearchApi(apiConfig(endpoint)); @@ -77,37 +79,34 @@ export const BlrSearch = ({ endpoint, recordDOI, resourceType }) => { }; return ( - <> -
Linked records
- - - <> -
- - -
+ + + <> +
+ + +
- - - - - - + + + + + - - -
-
- + + + +
+
); }; @@ -115,4 +114,5 @@ BlrSearch.propTypes = { endpoint: PropTypes.string.isRequired, recordDOI: PropTypes.string.isRequired, resourceType: PropTypes.string.isRequired, + blrId: PropTypes.string.isRequired, }; diff --git a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/BlrResultsLoader.js b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/BlrResultsLoader.js new file mode 100644 index 00000000..b991d1a8 --- /dev/null +++ b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/BlrResultsLoader.js @@ -0,0 +1,19 @@ +import React from "react"; +import { Placeholder } from "semantic-ui-react"; + +export const BlrResultsLoader = (children, loading) => { + return loading ? ( + + + + + + + + + + + ) : ( + children + ); +}; diff --git a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/NoResults.js b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/NoResults.js index 01590046..9d8f5353 100644 --- a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/NoResults.js +++ b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/components/NoResults.js @@ -21,33 +21,14 @@ // as an Intergovernmental Organization or submit itself to any jurisdiction. import React from "react"; -import { PropTypes } from "prop-types"; -import { Container, Icon } from "semantic-ui-react"; +import { Container } from "semantic-ui-react"; -export const NoResults = ({ queryString }) => { +export const NoResults = () => { return ( - - {(queryString && ( -
- -

- No results found for '{queryString}' -

-
- )) || ( -

- - No related content for this record. -

- )} + +

+ No related content for this record +

); }; - -NoResults.propTypes = { - queryString: PropTypes.string, -}; - -NoResults.defaultProps = { - queryString: "", -}; diff --git a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/index.js b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/index.js index 5a498ed1..c53d50c7 100644 --- a/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/index.js +++ b/site/zenodo_rdm/assets/semantic-ui/js/zenodo_rdm/src/blr-related-works/index.js @@ -28,23 +28,15 @@ const blrContainer = document.getElementById("blr-search"); const endpoint = blrContainer.dataset.blrEndpoint; const recordDOI = JSON.parse(blrContainer.dataset.recordDoi); const resourceType = JSON.parse(blrContainer.dataset.resourceType); +const blrId = JSON.parse(blrContainer.dataset.blrId); -const validTypes = [ - "Figure", - "Taxonomic treatment", - "Book chapter", - "Journal article", - "Drawing", -]; - -if (validTypes.includes(resourceType)) { - blrContainer && - ReactDOM.render( - , - blrContainer - ); -} +blrContainer && + ReactDOM.render( + , + blrContainer + ); diff --git a/site/zenodo_rdm/filters.py b/site/zenodo_rdm/filters.py new file mode 100644 index 00000000..0eb0b509 --- /dev/null +++ b/site/zenodo_rdm/filters.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2024 CERN. +# +# ZenodoRDM is free software; you can redistribute it and/or modify it +# under the terms of the MIT License; see LICENSE file for more details. + +from invenio_records.dictutils import dict_lookup + + +def is_blr_related_record(record): + """Check if we need to display related records for this record.""" + valid_types = [ + "Figure", + "Taxonomic treatment", + "Book chapter", + "Journal article", + "Drawing", + ] + + try: + slug = dict_lookup(record, "expanded.parent.communities.default.slug") + resource_type = dict_lookup(record, "metadata.resource_type.title.en") + is_valid_type = resource_type in valid_types + + if slug == "biosyslit" and is_valid_type: + return True + + return False + except KeyError: + return False diff --git a/site/zenodo_rdm/views.py b/site/zenodo_rdm/views.py index 3abd50a1..346b305b 100644 --- a/site/zenodo_rdm/views.py +++ b/site/zenodo_rdm/views.py @@ -15,6 +15,9 @@ from .decorators import cached_unless_authenticated_or_flashes from .support.support import ZenodoSupport +from .filters import ( + is_blr_related_record, +) # @@ -87,4 +90,7 @@ def handle_validation_errors(e): app.register_error_handler(400, handle_validation_errors) + # Register template filters + blueprint.add_app_template_filter(is_blr_related_record) + return blueprint diff --git a/templates/semantic-ui/zenodo_rdm/records/detail.html b/templates/semantic-ui/zenodo_rdm/records/detail.html index 20e62d52..ea8009ab 100644 --- a/templates/semantic-ui/zenodo_rdm/records/detail.html +++ b/templates/semantic-ui/zenodo_rdm/records/detail.html @@ -9,6 +9,7 @@ {%- extends "invenio_app_rdm/records/detail.html" %} {%- set citations_enabled = config.ZENODO_RECORDS_UI_CITATIONS_ENABLE %} +{%- set isBlrRecord = record | is_blr_related_record %} {%- block record_files -%} {# record has files BUT passed files are empty. This happens when we display are request. #} @@ -65,16 +66,28 @@

{{ record.ui.access_status.title_l10n }}

{# Additional details #} {%- block record_details -%} - {% if record.expanded.parent.communities.default.slug == "biosyslit" %} + {% if isBlrRecord %} {# BLR Related works #} +

Linked records

{% endif %} @@ -103,7 +116,7 @@

{{ record.ui.access_status.title_l10n }}

{{super()}} {{ webpack['zenodo-rdm-citations.js'] }} - {% if record.expanded.parent.communities.default.slug == "biosyslit" %} + {% if isBlrRecord %} {{ webpack['zenodo-rdm-blr-search.js'] }} {% endif %} {% endblock javascript %}