Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 125 additions & 13 deletions features/entryscape/dataset-series-page/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Entry } from "@entryscape/entrystore-js";
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { FC, useContext, useEffect, useMemo } from "react";
Expand All @@ -8,6 +9,7 @@ import { Container } from "@/components/layout/container";
import { Heading } from "@/components/typography/heading";
import { createSearchProviderSettings } from "@/features/search/search-page/search-page-entryscape/search-page-provider-settings";
import { SearchResults } from "@/features/search/search-results";
import { useEntryScapeBlocks } from "@/hooks/use-entry-scape-blocks";
import { EntrystoreContext } from "@/providers/entrystore-provider";
import SearchProvider, {
SearchContext,
Expand Down Expand Up @@ -38,11 +40,21 @@ const SearchTrigger: FC<{ search: SearchContextData; entry: Entry }> = ({

export const DatasetSeriesPage: FC = () => {
const { pathname } = useRouter() || {};
const { env, setBreadcrumb } = useContext(SettingsContext);
const { env, setBreadcrumb, iconSize } = useContext(SettingsContext);
const entry = useContext(EntrystoreContext);
const { t, lang } = useTranslation();
const router = useRouter();

useEntryScapeBlocks({
entrystoreBase: entry.entrystore.getBaseURI(),
env: entry.env,
lang,
iconSize,
pageType: "dataset",
context: entry.context,
esId: entry.esId,
});

useEffect(() => {
setBreadcrumb?.({
name: entry.title,
Expand Down Expand Up @@ -97,18 +109,118 @@ export const DatasetSeriesPage: FC = () => {
<div className="mt-xl bg-white py-xl">
<SearchTrigger search={search} entry={entry.entry} />
<Container>
<div
className={
search.result.hits && search.result.hits.length === 0
? "min-h-[800px]"
: ""
}
>
<SearchResults
showSorting={false}
search={search}
searchMode={"datasets-series"}
/>
<div className="mb-lg gap-2xl md:mb-xl lg:flex">
{/* Left column - Search results */}
<div className="mb-lg flex w-full flex-col gap-lg lg:mb-xl lg:max-w-md">
<div
className={
search.result.hits && search.result.hits.length === 0
? "min-h-[800px]"
: ""
}
>
<SearchResults
showSorting={false}
search={search}
searchMode={"datasets-series"}
/>
</div>
</div>

{/* Right column - About and Catalog */}
<div className="mb-lg w-full max-w-md space-y-lg bg-white pt-none lg:mb-none lg:max-w-[18.5rem]">
{/* About dataset series - wrapper */}
<div
data-test-id="about-section"
className="box-border w-full p-md"
>
<Heading
level={2}
size={"sm"}
className="mb-md font-strong text-textSecondary md:mb-lg"
>
{t("pages|dataset-series$about-dataset-serie")}
</Heading>

<div className="space-y-lg">
{/* About dataset series */}
<div data-entryscape="aboutDatasetSeries" />
</div>
</div>

{/* Catalog information wrapper */}
<div
data-test-id="catalog-information"
className="box-border w-full p-md"
>
<Heading
level={2}
size={"sm"}
className="mb-sm font-strong text-textSecondary md:mb-md"
>
{t("pages|datasetpage$catalog")}
</Heading>
<div className="space-y-lg">
{entry.mqaCatalog && (
<div>
<Heading
className="font-strong text-textSecondary"
level={3}
size={"xxs"}
>
{t("pages|datasetpage$mqa-catalog")}
</Heading>
<Link
className="text-sm text-green-600 underline-offset-2 hover:no-underline"
href={entry.mqaCatalog.url}
>
{entry.mqaCatalog.title}
</Link>
</div>
)}
<div />

{/* Catalog */}
<div data-entryscape="catalog" />

<div
data-entryscape="view"
data-entryscape-rdformsid="dcat:OnlyCatalog"
data-entryscape-relationinverse="dcat:datasetSeries"
data-entryscape-onecol="true"
data-entryscape-filterpredicates="dcterms:issued,dcterms:language,dcterms:modified,dcterms:spatial,dcterms:license,dcat:themeTaxonomi"
/>

{/* Download formats */}
{entry.downloadFormats &&
entry.downloadFormats?.length > 0 && (
<div data-test-id="download-formats">
<Heading
className="font-strong text-textSecondary"
level={3}
size={"xxs"}
>
{t("pages|datasetpage$download_link")}
</Heading>
<div className="flex flex-col gap-xs">
{entry.downloadFormats.map(
({ title, url }, idx) => (
<a
key={idx}
href={url}
className="text-sm text-green-600 hover:no-underline"
>
{title}
</a>
),
)}
</div>
</div>
)}
</div>
</div>
</div>
{/* End right column */}
</div>
</Container>
</div>
Expand Down
3 changes: 2 additions & 1 deletion locales/en/pages.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@
"api": "About API"
},
"dataset-series": {
"data-serie": "Dataset serie"
"data-serie": "Dataset serie",
"about-dataset-serie": "About dataset serie"
},
"datasetpage": {
"about-dataset": "About dataset",
Expand Down
3 changes: 2 additions & 1 deletion locales/sv/pages.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@
"api": "Om API"
},
"dataset-series": {
"data-serie": "Datamängdsserie"
"data-serie": "Datamängdsserie",
"about-dataset-serie": "Om datamängdsserie"
},
"datasetpage": {
"about-dataset": "Om datamängd",
Expand Down
20 changes: 18 additions & 2 deletions providers/entrystore-provider/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,24 @@ export const EntrystoreProvider: FC<EntrystoreProviderProps> = ({
};
}

case "dataset-series":
return {};
case "dataset-series": {
// Fetch all data in parallel for dataset-series
const [keywords, formats, mqa, contact] = await Promise.all([
entrystoreService.getKeywords(entry),
entrystoreService.getDownloadFormats(
entry.getEntryInfo().getMetadataURI(),
),
entrystoreService.getRelatedMQA(entry),
entrystoreService.getContactInfo(metadata),
]);

return {
keywords,
downloadFormats: formats,
mqaCatalog: mqa,
contact,
};
}

case "dataservice":
return {};
Expand Down
23 changes: 23 additions & 0 deletions utilities/entryscape/blocks/datasets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,29 @@ export const datasetBlocks = (
"</div>" +
"</div>",
},
{
block: "aboutDatasetSeries",
extends: "template",
template:
'<div class="about_dataset">' +
'<div class="view_metadata_group">' +
'{{viewMetadata template="dcat:DatasetSeries" filterpredicates="' +
filterAllExceptContactAndLandingPage.join(",") +
'"}}' +
"</div>" +
'<div class="keyword">' +
"{{keyword}}" +
"</div>" +
'<div class="theme">' +
"{{theme}}" +
"</div>" +
'<div class="view_metadata_group">' +
'{{viewMetadata template="dcat:DatasetSeries" filterpredicates="' +
filterContactAndLandingPage.join(",") +
'"}}' +
"</div>" +
"</div>",
},
];
};

Expand Down