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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -77,6 +78,19 @@ const MetadataComponent: React.FC<MetadataProps> = ({ 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 (
<div className="flex flex-col gap-5 lg:gap-10">
Expand All @@ -102,15 +116,19 @@ const MetadataComponent: React.FC<MetadataProps> = ({ data, setOpen }) => {
<Divider />
<div className=" flex flex-col gap-8">
<div className=" hidden rounded-2 border-1 border-solid border-greyExtralight p-2 lg:block">
<Image
height={140}
width={100}
src={image}
alt={
data.isIndividualDataset ? 'Publisher logo' : 'Organization logo'
}
className="w-full object-contain"
/>
<Link href={getPublisherURL(data)}>
<Image
height={140}
width={100}
src={image}
alt={
data.isIndividualDataset
? 'Publisher logo'
: 'Organization logo'
}
className="w-full object-contain"
/>
</Link>
</div>
<div className="flex items-center gap-2 ">
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
Expand All @@ -123,15 +141,17 @@ const MetadataComponent: React.FC<MetadataProps> = ({ data, setOpen }) => {
: data.organization.name
}
>
<Text
className="line-clamp-2 "
variant="bodyLg"
fontWeight="medium"
>
{data.isIndividualDataset
? data.user.fullName
: data.organization.name}
</Text>
<Link href={getPublisherURL(data)}>
<Text
className="line-clamp-2 "
variant="bodyLg"
fontWeight="medium"
>
{data.isIndividualDataset
? data.user.fullName
: data.organization.name}
</Text>
</Link>
</Tooltip>
</div>
<div className="flex gap-2 ">
Expand Down
15 changes: 12 additions & 3 deletions app/[locale]/(user)/publishers/[publisherSlug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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(`
Expand All @@ -17,12 +17,17 @@ const userInfo = graphql(`
}
}
`);

export async function generateMetadata({
params,
}: {
params: { publisherSlug: string };
}): Promise<Metadata> {
const data = await GraphQL(userInfo, {}, { userId: params.publisherSlug });
const data = await GraphQL(
userInfo,
{},
{ userId: extractPublisherId(params.publisherSlug) }
);

const user = data.userById;

Expand Down Expand Up @@ -58,5 +63,9 @@ export default function PublisherPage({
}: {
params: { publisherSlug: string };
}) {
return <PublisherPageClient publisherSlug={params.publisherSlug} />;
return (
<PublisherPageClient
publisherSlug={extractPublisherId(params.publisherSlug)}
/>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(`
Expand All @@ -23,7 +23,11 @@ export async function generateMetadata({
}: {
params: { organizationSlug: string };
}): Promise<Metadata> {
const data = await GraphQL(orgDataQuery, {}, { id: params.organizationSlug });
const data = await GraphQL(
orgDataQuery,
{},
{ id: extractPublisherId(params.organizationSlug) }
);

const org = data.organization;

Expand Down Expand Up @@ -59,5 +63,9 @@ export default function OrgPage({
}: {
params: { organizationSlug: string };
}) {
return <OrgPageClient organizationSlug={params.organizationSlug} />;
return (
<OrgPageClient
organizationSlug={extractPublisherId(params.organizationSlug)}
/>
);
}
77 changes: 46 additions & 31 deletions app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -29,12 +30,15 @@ const UseCasedetails: any = graphql(`
user {
fullName
email
id
profilePicture {
url
}
}
organization {
name
slug
id
contactEmail
logo {
url
Expand Down Expand Up @@ -117,13 +121,15 @@ const UseCasedetails: any = graphql(`
}
supportingOrganizations {
id
slug
name
logo {
url
}
}
partnerOrganizations {
id
slug
name
logo {
url
Expand Down Expand Up @@ -281,18 +287,20 @@ const UseCaseDetailClient = () => {
<div className="mt-8 flex h-fit w-fit flex-wrap items-center justify-start gap-6 ">
{UseCaseDetails?.useCase?.supportingOrganizations?.map(
(org: any) => (
<div
<Link
href={`/publishers/organization/${org.slug + '_' + org.id}`}
key={org.id}
className=" rounded-4 bg-surfaceDefault p-4"
>
<Image
src={`${process.env.NEXT_PUBLIC_BACKEND_URL}/${org.logo?.url}`}
alt={org.name}
width={140}
height={100}
className=" object-contain"
/>
</div>
<div className=" rounded-4 bg-surfaceDefault p-4">
<Image
src={`${process.env.NEXT_PUBLIC_BACKEND_URL}/${org.logo?.url}`}
alt={org.name}
width={140}
height={100}
className=" object-contain"
/>
</div>
</Link>
)
)}
</div>
Expand All @@ -306,18 +314,20 @@ const UseCaseDetailClient = () => {
<div className="mt-8 flex h-fit w-fit flex-wrap items-center justify-start gap-6 ">
{UseCaseDetails?.useCase?.partnerOrganizations?.map(
(org: any) => (
<div
<Link
href={`/publishers/organization/${org.slug + '_' + org.id}`}
key={org.id}
className=" rounded-4 bg-surfaceDefault p-4"
>
<Image
src={`${process.env.NEXT_PUBLIC_BACKEND_URL}/${org.logo?.url}`}
alt={org.name}
width={140}
height={100}
className=" object-contain"
/>
</div>
<div className=" rounded-4 bg-surfaceDefault p-4">
<Image
src={`${process.env.NEXT_PUBLIC_BACKEND_URL}/${org.logo?.url}`}
alt={org.name}
width={140}
height={100}
className=" object-contain"
/>
</div>
</Link>
)
)}
</div>
Expand All @@ -338,18 +348,23 @@ const UseCaseDetailClient = () => {
<div className="mt-8 flex flex-wrap items-center justify-start gap-8">
{UseCaseDetails?.useCase?.contributors?.map(
(contributor: any) => (
<Image
alt={contributor.fullName}
width={120}
height={120}
className="rounded-full object-cover"
<Link
href={`/publishers/${contributor.fullName + '_' + contributor.id}`}
key={contributor.id}
src={
contributor.profilePicture?.url
? `${process.env.NEXT_PUBLIC_BACKEND_URL}/${contributor.profilePicture?.url}`
: '/profile.png'
}
/>
>
<Image
alt={contributor.fullName}
width={120}
height={120}
className="rounded-full object-cover"
key={contributor.id}
src={
contributor.profilePicture?.url
? `${process.env.NEXT_PUBLIC_BACKEND_URL}/${contributor.profilePicture?.url}`
: '/profile.png'
}
/>
</Link>
)
)}
</div>
Expand Down
64 changes: 45 additions & 19 deletions app/[locale]/(user)/usecases/components/Metadata.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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: (
<Tooltip
content={
data.useCase.isIndividualUsecase
? data.useCase.user.fullName
: data.useCase.organization.name
}
>
<Link href={getOrganizationLink()}>
{data.useCase.isIndividualUsecase
? data.useCase.user.fullName
: data?.useCase.organization?.name}
</Link>
</Tooltip>
),
},
{
label: 'Contact',
Expand Down Expand Up @@ -162,19 +186,21 @@ const Metadata = ({ data, setOpen }: { data: any; setOpen?: any }) => {
</div>
<Divider />
<div className=" flex flex-col gap-8">
<div className=" hidden rounded-2 border-1 border-solid border-greyExtralight p-2 lg:block">
<Image
height={140}
width={100}
src={image}
alt={
data.useCase.isIndividualUsecase
? 'Publisher logo'
: 'Organization logo'
}
className="w-full object-contain"
/>
</div>
<Link href={getOrganizationLink()}>
<div className="hidden rounded-2 border-1 border-solid border-greyExtralight p-2 lg:block">
<Image
height={140}
width={100}
src={image}
alt={
data.useCase.isIndividualUsecase
? 'Publisher logo'
: 'Organization logo'
}
className="w-full object-contain"
/>
</div>
</Link>
<div className="flex flex-col gap-8">
{metadata.map((item, index) => (
<div key={index} className="flex gap-2">
Expand Down
Loading
Loading