diff --git a/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx b/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx index 743ad154..fbeec857 100644 --- a/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx +++ b/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx @@ -2,9 +2,10 @@ import React, { useEffect, useState } from 'react'; import Image from 'next/image'; import Link from 'next/link'; import { Button, Divider, Icon, Tag, Text, Tooltip } from 'opub-ui'; -import Styles from '../../../dataset.module.scss' + import { cn, formatDate, getWebsiteTitle } from '@/lib/utils'; import { Icons } from '@/components/icons'; +import Styles from '../../../dataset.module.scss'; interface MetadataProps { data: any; @@ -77,6 +78,19 @@ const MetadataComponent: React.FC = ({ data, setOpen }) => { : data?.organization?.logo ? `${process.env.NEXT_PUBLIC_BACKEND_URL}/${data.organization.logo.url}` : '/org.png'; + const getPublisherURL = (data: any) => { + if (!data) return '/publishers'; + + if (data.isIndividualDataset && data.user) { + return `/publishers/${data.user.fullName + '_' + data.user.id}`; + } + + if (data.organization) { + return `/publishers/organization/${data.organization.slug + '_' + data.organization.id}`; + } + + return '/publishers'; + }; return (
@@ -102,15 +116,19 @@ const MetadataComponent: React.FC = ({ data, setOpen }) => {
- { + + { +
@@ -123,15 +141,17 @@ const MetadataComponent: React.FC = ({ data, setOpen }) => { : data.organization.name } > - - {data.isIndividualDataset - ? data.user.fullName - : data.organization.name} - + + + {data.isIndividualDataset + ? data.user.fullName + : data.organization.name} + +
diff --git a/app/[locale]/(user)/publishers/[publisherSlug]/page.tsx b/app/[locale]/(user)/publishers/[publisherSlug]/page.tsx index a839429c..b527b770 100644 --- a/app/[locale]/(user)/publishers/[publisherSlug]/page.tsx +++ b/app/[locale]/(user)/publishers/[publisherSlug]/page.tsx @@ -2,7 +2,7 @@ import { Metadata } from 'next'; import { graphql } from '@/gql'; import { GraphQL } from '@/lib/api'; -import { generatePageMetadata } from '@/lib/utils'; +import { extractPublisherId, generatePageMetadata } from '@/lib/utils'; import PublisherPageClient from './PublisherPageClient'; const userInfo = graphql(` @@ -17,12 +17,17 @@ const userInfo = graphql(` } } `); + export async function generateMetadata({ params, }: { params: { publisherSlug: string }; }): Promise { - const data = await GraphQL(userInfo, {}, { userId: params.publisherSlug }); + const data = await GraphQL( + userInfo, + {}, + { userId: extractPublisherId(params.publisherSlug) } + ); const user = data.userById; @@ -58,5 +63,9 @@ export default function PublisherPage({ }: { params: { publisherSlug: string }; }) { - return ; + return ( + + ); } diff --git a/app/[locale]/(user)/publishers/organization/[organizationSlug]/page.tsx b/app/[locale]/(user)/publishers/organization/[organizationSlug]/page.tsx index 9107c1b9..5e9f25a9 100644 --- a/app/[locale]/(user)/publishers/organization/[organizationSlug]/page.tsx +++ b/app/[locale]/(user)/publishers/organization/[organizationSlug]/page.tsx @@ -2,7 +2,7 @@ import { Metadata } from 'next'; import { graphql } from '@/gql'; import { GraphQL } from '@/lib/api'; -import { generatePageMetadata } from '@/lib/utils'; +import { extractPublisherId, generatePageMetadata } from '@/lib/utils'; import OrgPageClient from './OrgPageClient'; const orgDataQuery = graphql(` @@ -23,7 +23,11 @@ export async function generateMetadata({ }: { params: { organizationSlug: string }; }): Promise { - const data = await GraphQL(orgDataQuery, {}, { id: params.organizationSlug }); + const data = await GraphQL( + orgDataQuery, + {}, + { id: extractPublisherId(params.organizationSlug) } + ); const org = data.organization; @@ -59,5 +63,9 @@ export default function OrgPage({ }: { params: { organizationSlug: string }; }) { - return ; + return ( + + ); } diff --git a/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx b/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx index bd62ea7f..4a5f5978 100644 --- a/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx +++ b/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx @@ -1,6 +1,7 @@ 'use client'; import Image from 'next/image'; +import Link from 'next/link'; import { useParams } from 'next/navigation'; import { graphql } from '@/gql'; import { TypeDataset, TypeUseCase } from '@/gql/generated/graphql'; @@ -29,12 +30,15 @@ const UseCasedetails: any = graphql(` user { fullName email + id profilePicture { url } } organization { name + slug + id contactEmail logo { url @@ -117,6 +121,7 @@ const UseCasedetails: any = graphql(` } supportingOrganizations { id + slug name logo { url @@ -124,6 +129,7 @@ const UseCasedetails: any = graphql(` } partnerOrganizations { id + slug name logo { url @@ -281,18 +287,20 @@ const UseCaseDetailClient = () => {
{UseCaseDetails?.useCase?.supportingOrganizations?.map( (org: any) => ( -
- {org.name} -
+
+ {org.name} +
+ ) )}
@@ -306,18 +314,20 @@ const UseCaseDetailClient = () => {
{UseCaseDetails?.useCase?.partnerOrganizations?.map( (org: any) => ( -
- {org.name} -
+
+ {org.name} +
+ ) )}
@@ -338,18 +348,23 @@ const UseCaseDetailClient = () => {
{UseCaseDetails?.useCase?.contributors?.map( (contributor: any) => ( - {contributor.fullName} + > + {contributor.fullName} + ) )}
diff --git a/app/[locale]/(user)/usecases/components/Metadata.tsx b/app/[locale]/(user)/usecases/components/Metadata.tsx index 9999233c..2f427b52 100644 --- a/app/[locale]/(user)/usecases/components/Metadata.tsx +++ b/app/[locale]/(user)/usecases/components/Metadata.tsx @@ -29,15 +29,39 @@ const Metadata = ({ data, setOpen }: { data: any; setOpen?: any }) => { fetchTitle(); } }, [data.useCase.platformUrl]); + + const getOrganizationLink = () => { + if (!data) return '/publishers'; + + if (data.useCase.isIndividualUsecase && data.useCase.user) { + return `/publishers/${data.useCase.user.fullName + '_' + data.useCase.user.id}`; + } + + if (data.useCase.organization) { + return `/publishers/organization/${data.useCase.organization.slug + '_' + data.useCase.organization.id}`; + } + + return '/publishers'; + }; + const metadata = [ { label: data.useCase.isIndividualUsecase ? 'Publisher' : 'Organization', - value: data.useCase.isIndividualUsecase - ? data.useCase.user.fullName - : data?.useCase.organization?.name, - tooltipContent: data.useCase.isIndividualUsecase - ? data.useCase.user.fullName - : data?.useCase.organization?.name, + value: ( + + + {data.useCase.isIndividualUsecase + ? data.useCase.user.fullName + : data?.useCase.organization?.name} + + + ), }, { label: 'Contact', @@ -162,19 +186,21 @@ const Metadata = ({ data, setOpen }: { data: any; setOpen?: any }) => {
-
- { -
+ +
+ { +
+
{metadata.map((item, index) => (
diff --git a/lib/utils.ts b/lib/utils.ts index 500daf5d..811b7c7c 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,4 +1,5 @@ import { Metadata } from 'next'; +import { Metadata } from 'next'; import { twMerge, type ClassNameValue } from 'tailwind-merge'; type MetadataOptions = { @@ -148,11 +149,23 @@ export function formatDateString( ) .toISOString() .split('T')[0] + date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'numeric', + // day: 'numeric', + }) + ) + .toISOString() + .split('T')[0] : date.toLocaleDateString('en-US', { month: 'long', // day: 'numeric', year: 'numeric', }); + month: 'long', + // day: 'numeric', + year: 'numeric', + }); } export async function getWebsiteTitle(url: string): Promise { @@ -256,3 +269,12 @@ export const ENTITY_CONFIG: ENTITY_CONFIG_TYPE = { priority: '0.6', }, }; +export const extractPublisherId = (publisherSlug: any) => { + // If the param contains an underscore, split and take the last part + if (publisherSlug.includes('_')) { + return publisherSlug.split('_').pop(); + } + + // Otherwise, return the param as is (it's already just the ID) + return publisherSlug; +};