diff --git a/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx b/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx index f7cefb3a..52b36f85 100644 --- a/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx +++ b/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx @@ -337,7 +337,7 @@ const CollaborativesListingClient = () => { stroke: 1.2, }, ]} - href={getCollaborativeDetailUrl(collaborative.slug)} + href={`/collaboratives/${collaborative.slug}`} leftFooterChips={[ { icon: collaborative.sectors?.[0]?.name diff --git a/app/[locale]/(user)/collaboratives/[collaborativeSlug]/CollaborativeDetailsClient.tsx b/app/[locale]/(user)/collaboratives/[collaborativeSlug]/CollaborativeDetailsClient.tsx index f7a84cad..163774d4 100644 --- a/app/[locale]/(user)/collaboratives/[collaborativeSlug]/CollaborativeDetailsClient.tsx +++ b/app/[locale]/(user)/collaboratives/[collaborativeSlug]/CollaborativeDetailsClient.tsx @@ -323,7 +323,7 @@ const CollaborativeDetailClient = () => { }); const organizationPublisherHref = (org: any) => { - const path = `/publishers/organization/${org.id}`; + const path = `/publishers/organization/${org.slug || org.name}_${org.id}`; // Original: `/publishers/organization/${org.slug + '_' + org.id}`; // Match getPlatformEntityUrl() behavior (absolute to platform host + locale) const platformBaseUrl = ( diff --git a/app/[locale]/(user)/collaboratives/components/Metadata.tsx b/app/[locale]/(user)/collaboratives/components/Metadata.tsx index bd7ea924..687d557b 100644 --- a/app/[locale]/(user)/collaboratives/components/Metadata.tsx +++ b/app/[locale]/(user)/collaboratives/components/Metadata.tsx @@ -119,7 +119,7 @@ const Metadata = ({ data, setOpen }: { data: any; setOpen?: any }) => { return match ? `/${match[1].toLowerCase()}` : ''; }; const contributorHref = (contributor: any) => { - const path = `/publishers/${contributor.id}`; + const path = `/publishers/${contributor.fullName}_${contributor.id}`; // Original: `/publishers/${contributor.fullName + '_' + contributor.id}`; // Match getPlatformEntityUrl() behavior (absolute to NEXT_PUBLIC_PLATFORM_URL + locale) const platformBaseUrl = ( diff --git a/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx b/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx index 205ae8b6..fd9ddfb8 100644 --- a/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx +++ b/app/[locale]/(user)/datasets/[datasetIdentifier]/components/Metadata/index.tsx @@ -83,11 +83,11 @@ const MetadataComponent: React.FC = ({ data, setOpen }) => { if (!data) return '/publishers'; if (data.isIndividualDataset && data.user) { - return `/publishers/${data.user.id}`; + return `/publishers/${data.user.fullName}_${data.user.id}`; } if (data.organization) { - return `/publishers/organization/${data.organization.id}`; + return `/publishers/organization/${data.organization.slug}_${data.organization.id}`; } return '/publishers'; diff --git a/app/[locale]/(user)/publishers/PublisherCard.tsx b/app/[locale]/(user)/publishers/PublisherCard.tsx index 5a9124d0..0ea9b437 100644 --- a/app/[locale]/(user)/publishers/PublisherCard.tsx +++ b/app/[locale]/(user)/publishers/PublisherCard.tsx @@ -15,8 +15,8 @@ const PublisherCard: React.FC = ({ data }) => { { const params = useParams(); + const id = extractPublisherId( + String(type === 'organization' ? params.organizationSlug : params.publisherSlug) + ); const PublishedDatasetsList: any = useQuery( - [ - type === 'organization' - ? `orgPublishedDatasets_${params.organizationSlug}` - : `userPublishedDatasets_${params.publisherSlug}`, - ], + ['publishedDatasets', type, id], () => type === 'organization' ? GraphQL( @@ -118,14 +117,14 @@ const Datasets = ({ type }: { type: 'organization' | 'Publisher' }) => { { // Entity Headers }, - { organizationId: params.organizationSlug } // ✅ exact match for expected shape + { organizationId: id } // ✅ exact match for expected shape ) : GraphQL( userPublishedDatasetsDoc, { // Entity Headers }, - { userId: params.publisherSlug } // ✅ exact match for expected shape + { userId: id } // ✅ exact match for expected shape ) ); diff --git a/app/[locale]/(user)/publishers/components/UseCases.tsx b/app/[locale]/(user)/publishers/components/UseCases.tsx index 964b34ac..2f4bbb71 100644 --- a/app/[locale]/(user)/publishers/components/UseCases.tsx +++ b/app/[locale]/(user)/publishers/components/UseCases.tsx @@ -5,7 +5,7 @@ import { useQuery } from '@tanstack/react-query'; import { Card, Icon, Spinner, Text } from 'opub-ui'; import { GraphQL } from '@/lib/api'; -import { cn, formatDate } from '@/lib/utils'; +import { cn, extractPublisherId, formatDate } from '@/lib/utils'; import { Icons } from '@/components/icons'; import { stripMarkdown } from '../../search/components/UnifiedListingComponent'; @@ -101,13 +101,12 @@ const orgPublishedUseCasesDoc: any = graphql(` const UseCases = ({ type }: { type: 'organization' | 'Publisher' }) => { const params = useParams(); + const id = extractPublisherId( + String(type === 'organization' ? params.organizationSlug : params.publisherSlug) + ); const PublishedUseCasesList: any = useQuery( - [ - type === 'organization' - ? `orgPublishedUseCases_${params.organizationSlug}` - : `userPublishedUseCases_${params.publisherSlug}`, - ], + ['publishedUseCases', type, id], () => type === 'organization' ? GraphQL( @@ -115,14 +114,14 @@ const UseCases = ({ type }: { type: 'organization' | 'Publisher' }) => { { // Entity Headers }, - { organizationId: params.organizationSlug } // ✅ exact match for expected shape + { organizationId: id } // ✅ exact match for expected shape ) : GraphQL( userPublishedUseCasesDoc, { // Entity Headers }, - { userId: params.publisherSlug } // ✅ exact match for expected shape + { userId: id } // ✅ exact match for expected shape ) ); diff --git a/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx b/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx index 83040c3c..85eae74f 100644 --- a/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx +++ b/app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx @@ -362,7 +362,7 @@ const UseCaseDetailClient = () => { {UseCaseDetails?.useCase?.supportingOrganizations?.map( (org: any) => (
@@ -389,7 +389,7 @@ const UseCaseDetailClient = () => { {UseCaseDetails?.useCase?.partnerOrganizations?.map( (org: any) => (
@@ -423,7 +423,7 @@ const UseCaseDetailClient = () => { {UseCaseDetails?.useCase?.contributors?.map( (contributor: any) => ( { if (!data) return '/publishers'; if (data.useCase.isIndividualUsecase && data.useCase.user) { - return `/publishers/${data.useCase.user.id}`; + return `/publishers/${data.useCase.user.fullName}_${data.useCase.user.id}`; } if (data.useCase.organization) { - return `/publishers/organization/${data.useCase.organization.id}`; + return `/publishers/organization/${data.useCase.organization.slug || data.useCase.organization.name}_${data.useCase.organization.id}`; } return '/publishers';