Skip to content

Commit 8629c8f

Browse files
committed
load usecase details without auth and add debug statements
1 parent 7a283bd commit 8629c8f

File tree

3 files changed

+86
-31
lines changed

3 files changed

+86
-31
lines changed

app/[locale]/(user)/usecases/[useCaseSlug]/UsecaseDetailsClient.tsx

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import { graphql } from '@/gql';
77
import { TypeDataset, TypeUseCase } from '@/gql/generated/graphql';
88
import { useQuery } from '@tanstack/react-query';
99
import { Card, Text } from 'opub-ui';
10+
import { useSession } from 'next-auth/react';
1011

11-
import { GraphQLClient } from '@/lib/api';
12+
import { GraphQLPublic } from '@/lib/api';
1213
import { formatDate, generateJsonLd } from '@/lib/utils';
1314
import BreadCrumbs from '@/components/BreadCrumbs';
1415
import { Icons } from '@/components/icons';
@@ -141,30 +142,50 @@ const UseCasedetails: any = graphql(`
141142

142143
const UseCaseDetailClient = () => {
143144
const params = useParams();
145+
const { data: session, status: sessionStatus } = useSession();
146+
147+
// Debug logging
148+
console.log('Debug Info:', {
149+
useCaseSlug: params.useCaseSlug,
150+
sessionStatus,
151+
hasSession: !!session,
152+
accessToken: session?.access_token ? 'Present' : 'Missing',
153+
backendUrl: process.env.NEXT_PUBLIC_BACKEND_GRAPHQL_URL,
154+
});
155+
144156
const {
145157
data: UseCaseDetails,
146158
isLoading,
147159
error,
148160
} = useQuery<{ useCase: TypeUseCase }>(
149161
[`fetch_UsecaseDetails_${params.useCaseSlug}`],
150-
() =>
151-
GraphQLClient(
152-
UseCasedetails,
153-
{},
154-
{
155-
pk: params.useCaseSlug,
156-
}
157-
),
162+
async () => {
163+
console.log('Making public GraphQL request for usecase:', params.useCaseSlug);
164+
try {
165+
const result = await GraphQLPublic(
166+
UseCasedetails,
167+
{},
168+
{
169+
pk: params.useCaseSlug,
170+
}
171+
) as { useCase: TypeUseCase };
172+
console.log('Public GraphQL request successful:', result);
173+
return result;
174+
} catch (err) {
175+
console.error('Public GraphQL request failed:', err);
176+
throw err;
177+
}
178+
},
158179
{
159180
refetchOnMount: true,
160181
refetchOnReconnect: true,
161182
retry: (failureCount, error: any) => {
162-
// Don't retry on 401/403 errors
163-
if (error?.message?.includes('401') || error?.message?.includes('403')) {
164-
return false;
165-
}
183+
console.log('Retry attempt:', failureCount, 'Error:', error);
166184
return failureCount < 3;
167185
},
186+
onError: (error: any) => {
187+
console.error('Query error:', error);
188+
},
168189
}
169190
);
170191
const datasets = UseCaseDetails?.useCase?.datasets || []; // Fallback to an empty array

app/[locale]/(user)/usecases/[useCaseSlug]/page.tsx

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Metadata } from 'next';
22
import { graphql } from '@/gql';
33

4-
import { GraphQL } from '@/lib/api';
4+
import { GraphQLPublic } from '@/lib/api';
55
import { generatePageMetadata } from '@/lib/utils';
66
import UseCaseDetailClient from './UsecaseDetailsClient';
77

@@ -28,28 +28,45 @@ export async function generateMetadata({
2828
}: {
2929
params: { useCaseSlug: string };
3030
}): Promise<Metadata> {
31-
const data = await GraphQL(UseCaseInfoQuery, {}, { pk: params.useCaseSlug });
31+
try {
32+
const data = await GraphQLPublic(UseCaseInfoQuery, {}, { pk: params.useCaseSlug });
33+
const UseCase = data?.useCase;
3234

33-
const UseCase = data?.useCase;
34-
35-
return generatePageMetadata({
36-
title: `${UseCase?.title} | Sector Data | CivicDataSpace`,
37-
description:
38-
UseCase?.summary ||
39-
`Explore open data and curated datasets in the ${UseCase?.title} sector.`,
40-
keywords: UseCase?.tags?.map((tag: any) => tag.value) || [],
41-
openGraph: {
42-
type: 'article',
43-
locale: 'en_US',
44-
url: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/usecases/${params.useCaseSlug}`,
35+
return generatePageMetadata({
4536
title: `${UseCase?.title} | Sector Data | CivicDataSpace`,
4637
description:
4738
UseCase?.summary ||
4839
`Explore open data and curated datasets in the ${UseCase?.title} sector.`,
49-
siteName: 'CivicDataSpace',
50-
image: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/og.png`,
51-
},
52-
});
40+
keywords: UseCase?.tags?.map((tag: any) => tag.value) || [],
41+
openGraph: {
42+
type: 'article',
43+
locale: 'en_US',
44+
url: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/usecases/${params.useCaseSlug}`,
45+
title: `${UseCase?.title} | Sector Data | CivicDataSpace`,
46+
description:
47+
UseCase?.summary ||
48+
`Explore open data and curated datasets in the ${UseCase?.title} sector.`,
49+
siteName: 'CivicDataSpace',
50+
image: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/og.png`,
51+
},
52+
});
53+
} catch (error) {
54+
// Fallback to generic metadata if the API call fails
55+
return generatePageMetadata({
56+
title: `Use Case Details | CivicDataSpace`,
57+
description: `Explore open data and curated datasets in this use case.`,
58+
keywords: ['usecase', 'data', 'civic', 'open data'],
59+
openGraph: {
60+
type: 'article',
61+
locale: 'en_US',
62+
url: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/usecases/${params.useCaseSlug}`,
63+
title: `Use Case Details | CivicDataSpace`,
64+
description: `Explore open data and curated datasets in this use case.`,
65+
siteName: 'CivicDataSpace',
66+
image: `${process.env.NEXT_PUBLIC_PLATFORM_URL}/og.png`,
67+
},
68+
});
69+
}
5370
}
5471

5572
export default function Page() {

lib/api.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,23 @@ export async function GraphQLClient<TResult, TVariables>(
6262
return data;
6363
}
6464

65+
// Public GraphQL function that doesn't require authentication
66+
export async function GraphQLPublic<TResult, TVariables>(
67+
document: TypedDocumentNode<TResult, TVariables>,
68+
entityHeaders: Record<string, string> = {},
69+
...[variables]: TVariables extends Record<string, never> ? [] : [TVariables]
70+
) {
71+
const data = await request(
72+
`${process.env.NEXT_PUBLIC_BACKEND_GRAPHQL_URL}`,
73+
document,
74+
{
75+
...variables,
76+
},
77+
entityHeaders
78+
);
79+
return data;
80+
}
81+
6582
// wrapper function for react-query to be used by server components
6683
export const getQueryClient = React.cache(
6784
() =>

0 commit comments

Comments
 (0)