diff --git a/src/app/applications/[id]/TermsAcceptance.tsx b/src/app/applications/[id]/TermsAcceptance.tsx index 2eb33ad3..71840a8b 100644 --- a/src/app/applications/[id]/TermsAcceptance.tsx +++ b/src/app/applications/[id]/TermsAcceptance.tsx @@ -50,6 +50,10 @@ export default function TermsAcceptance() { } }; + if (!application?.licenses || application?.licenses.length === 0) { + return
No terms and conditions have been defined.
; + } + return ({getLabelName(dataset.title)}
+ + )), }, { label: "Participants", diff --git a/src/app/basket/page.tsx b/src/app/basket/page.tsx index 98f375d8..ada4a56a 100644 --- a/src/app/basket/page.tsx +++ b/src/app/basket/page.tsx @@ -13,7 +13,7 @@ import { useDatasetBasket } from "@/providers/DatasetBasketProvider"; import { createApplication } from "@/services/daam/index.client"; import { faPaperPlane, faPlusCircle } from "@fortawesome/free-solid-svg-icons"; import { signIn, useSession } from "next-auth/react"; -import DatasetList from "../../components/DatasetList"; +import DatasetList from "../datasets/DatasetList"; import { AxiosError } from "axios"; export default function Page() { diff --git a/src/app/datasets/DatasetCard.tsx b/src/app/datasets/DatasetCard.tsx new file mode 100644 index 00000000..7accde18 --- /dev/null +++ b/src/app/datasets/DatasetCard.tsx @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2024 PNED G.I.E. +// +// SPDX-License-Identifier: Apache-2.0 + +import Button from "@/components/Button"; +import { useWindowSize } from "@/hooks"; +import { useDatasetBasket } from "@/providers/DatasetBasketProvider"; +import { SearchedDataset } from "@/services/discovery/types/dataset.types"; +import { truncateDescription } from "@/utils/textProcessing"; +import { faMinusCircle, faPlusCircle } from "@fortawesome/free-solid-svg-icons"; +import Card, { CardItem } from "../../components/Card"; + +type DatasetCardProps = { + dataset: SearchedDataset; + cardItems: CardItem[]; +}; + +function DatasetCard({ dataset, cardItems }: Readonly- {application.description || "No description available"} -
- -{getLabelName(dataset.title)}
- - )); - -export default DatasetList; diff --git a/src/app/requests/applications/__tests__/applicationCardItems.test.ts b/src/app/requests/applications/__tests__/applicationCardItems.test.ts new file mode 100644 index 00000000..2478611e --- /dev/null +++ b/src/app/requests/applications/__tests__/applicationCardItems.test.ts @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2024 PNED G.I.E. +// +// SPDX-License-Identifier: Apache-2.0 + +import { createApplicationCardItems } from "../applicationCardItems"; +import { ListedApplication } from "@/types/application.types"; + +describe("applicationCardItems", () => { + beforeEach(() => { + global.window = {} as unknown as Window & typeof globalThis; + }); + + afterEach(() => { + global.window = undefined as unknown as Window & typeof globalThis; + }); + + it("should return application card items", () => { + const application: ListedApplication = { + id: 1, + title: "application1", + description: "app 1 description", + datasets: [], + currentState: "submitted", + createdAt: "2024-07-12", + stateChangedAt: "2024-08-03", + }; + + const items = createApplicationCardItems(application); + expect(items.length).toBe(2); + expect(items[0].text).toBe("Created on 12 July 2024"); + expect(items[1].text).toBe("Modified on 3 August 2024"); + }); + it("should return applicationCardItems with empty strings when dates are not empty", () => { + const application: ListedApplication = { + id: 1, + title: "application1", + description: "app 1 description", + datasets: [], + currentState: "submitted", + createdAt: "", + stateChangedAt: "", + }; + + const items = createApplicationCardItems(application); + expect(items.length).toBe(2); + expect(items[0].text).toBe(""); + expect(items[1].text).toBe(""); + }); +}); diff --git a/src/app/requests/applications/applicationCardItems.ts b/src/app/requests/applications/applicationCardItems.ts new file mode 100644 index 00000000..2c413990 --- /dev/null +++ b/src/app/requests/applications/applicationCardItems.ts @@ -0,0 +1,38 @@ +// SPDX-FileCopyrightText: 2024 PNED G.I.E. +// +// SPDX-License-Identifier: Apache-2.0 + +import { CardItem } from "@/components/Card"; +import { ListedApplication } from "@/types/application.types"; +import { formatDate } from "@/utils/formatDate"; +import { getLabelName } from "@/utils/getLabelName"; +import { + faCalendarAlt, + faDatabase, + faSyncAlt, +} from "@fortawesome/free-solid-svg-icons"; + +export function createApplicationCardItems( + application: ListedApplication +): CardItem[] { + return [ + { + text: + (application.createdAt && + `Created on ${formatDate(application.createdAt)}`) || + "", + icon: faCalendarAlt, + }, + { + text: + (application.stateChangedAt && + `Modified on ${formatDate(application.stateChangedAt)}`) || + "", + icon: faSyncAlt, + }, + ...application.datasets.map((dataset) => ({ + text: getLabelName(dataset.title), + icon: faDatabase, + })), + ]; +} diff --git a/src/app/requests/applications/index.tsx b/src/app/requests/applications/index.tsx index cc6dace6..00fb27ff 100644 --- a/src/app/requests/applications/index.tsx +++ b/src/app/requests/applications/index.tsx @@ -15,11 +15,11 @@ import { listApplications } from "@/services/daam/index.client"; import { ListedApplication } from "@/types/application.types"; import { faPlusCircle } from "@fortawesome/free-solid-svg-icons"; import React, { useEffect, useState } from "react"; -import ApplicationItem from "./ApplicationItem"; import { Status } from "@/utils/pageStatus.types"; import LoadingContainer from "@/components/LoadingContainer"; import { ErrorResponse } from "@/types/api.types"; import axios from "axios"; +import ApplicationCard from "./ApplicationCard"; interface ApplicationResponse { status: Status; @@ -85,7 +85,7 @@ const ApplicationsPage: React.FC = () => { key={item.id} className="bg-white mb-4 flex items-center justify-center px-2 rounded-lg shadow-lg border-b-4 border-b-[#B5BFC4] hover:border-b-secondary transition hover:bg-gray-50" > -
You don't have any entitlement yet.
- Start:
- {!start ? "-" : formatDate(start!)}
-
- End:
- {!end ? "-" : formatDate(end!)}
-
+ {description}
+
- {truncatedDesc || "No description available"}
-
diff --git a/src/app/requests/entitlements/EntitlementCard.tsx b/src/app/requests/entitlements/EntitlementCard.tsx
index 3aecf387..eeae9aa4 100644
--- a/src/app/requests/entitlements/EntitlementCard.tsx
+++ b/src/app/requests/entitlements/EntitlementCard.tsx
@@ -1,39 +1,23 @@
// SPDX-FileCopyrightText: 2024 PNED G.I.E.
//
// SPDX-License-Identifier: Apache-2.0
-"use client";
-import DatasetCard from "@/components/DatasetCard";
+import DatasetCard from "@/app/datasets/DatasetCard";
+import { CardItem } from "@/components/Card";
import { SearchedDataset } from "@/services/discovery/types/dataset.types";
-import { formatDate } from "@/utils/formatDate";
type EntitlementCardProps = {
dataset: SearchedDataset;
+ cardItems: CardItem[];
start?: string;
end?: string;
};
function EntitlementCard({
dataset,
- start,
- end,
+ cardItems,
}: Readonly