From c86c09efa2f12461ece5840e41d8c3da809568c0 Mon Sep 17 00:00:00 2001 From: jrcastro2 Date: Thu, 30 Jan 2025 16:41:23 +0100 Subject: [PATCH] resultList: add extra information * closes https://github.com/CERNDocumentServer/cds-rdm/issues/312 --- .../CDSRecordsResultsListItemDescription.js | 51 +++++++++++++++++++ .../overridableRegistry/mapping.js | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 assets/js/components/search/overrides/CDSRecordsResultsListItemDescription.js diff --git a/assets/js/components/search/overrides/CDSRecordsResultsListItemDescription.js b/assets/js/components/search/overrides/CDSRecordsResultsListItemDescription.js new file mode 100644 index 0000000..830c917 --- /dev/null +++ b/assets/js/components/search/overrides/CDSRecordsResultsListItemDescription.js @@ -0,0 +1,51 @@ +// This file is part of CDS RDM +// Copyright (C) 2025 CERN. +// +// CDS RDM is free software; you can redistribute it and/or modify it +// under the terms of the MIT License; see LICENSE file for more details. + +import _get from "lodash/get"; +import PropTypes from "prop-types"; +import React from "react"; +import { Item } from "semantic-ui-react"; + +export const CDSRecordsResultsListItemDescription = ({ result, descriptionStripped }) => { + const getMetadataField = (path) => _get(result, path, []); + + const cdsReferenceId = getMetadataField("metadata.identifiers") + .find((id) => id.scheme === "cds_ref")?.identifier; + + const experiments = getMetadataField("custom_fields.cern:experiments").map((exp) => exp.title.en); + const accelerators = getMetadataField("custom_fields.cern:accelerators").map((acc) => acc.title.en); + + const hasMetaData = cdsReferenceId || accelerators.length > 0 || experiments.length > 0; + const referenceOrAccelerators = cdsReferenceId || accelerators.length > 0; + return ( +
+ {descriptionStripped} + + {hasMetaData && ( + + {cdsReferenceId && {cdsReferenceId}} + {accelerators.length > 0 && ( + <> + {cdsReferenceId && |} + Accelerators: {accelerators.join(", ")} + + )} + {experiments.length > 0 && ( + <> + {referenceOrAccelerators && |} + Experiments: {experiments.join(", ")} + + )} + + )} +
+ ); +}; + +CDSRecordsResultsListItemDescription.propTypes = { + result: PropTypes.object.isRequired, + descriptionStripped: PropTypes.string.isRequired, +}; \ No newline at end of file diff --git a/assets/js/invenio_app_rdm/overridableRegistry/mapping.js b/assets/js/invenio_app_rdm/overridableRegistry/mapping.js index 3cf881d..b8084d1 100644 --- a/assets/js/invenio_app_rdm/overridableRegistry/mapping.js +++ b/assets/js/invenio_app_rdm/overridableRegistry/mapping.js @@ -1,8 +1,8 @@ import { BasicCERNInformation } from "../../components/deposit/BasicInformation"; import { CDSCarouselItem } from "../../components/communities_carousel/overrides/CarouselItem"; -import { CDSCommunitiesCarousel } from "../../components/communities_carousel/overrides/CommunitiesCarousel"; import { CDSRecordsList } from "../../components/frontpage/overrides/RecordsList"; import { CDSRecordsResultsListItem } from "../../components/frontpage/overrides/RecordsResultsListItem"; +import { CDSRecordsResultsListItemDescription } from "../../components/search/overrides/CDSRecordsResultsListItemDescription"; import { CDSAffiliationsSuggestions } from "../../components/deposit/overrides/CDSAffiliationsSuggestions"; export const overriddenComponents = { @@ -15,4 +15,5 @@ export const overriddenComponents = { "InvenioAppRdm.Deposit.CustomFields.container": () => null, "ReactInvenioForms.AffiliationsSuggestions.content": CDSAffiliationsSuggestions, + "InvenioAppRdm.Search.RecordsResultsListItem.description": CDSRecordsResultsListItemDescription, };