Skip to content

Commit 16bb7eb

Browse files
Make changes according to new version
1 parent 115bb35 commit 16bb7eb

File tree

5 files changed

+28
-21
lines changed

5 files changed

+28
-21
lines changed

src/app/(public)/repos/[language]/_components/pagination.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { Button } from '@/app/(public)/_components/button';
22
import { ArrowLeft, ArrowRight } from 'lucide-react';
33
import Link from 'next/link';
4+
import type { SearchParams } from '@/types';
45

56
const MAX_PER_PAGE = 21;
67
interface PaginationProps {
78
page: number;
89
totalCount: number;
9-
searchParams: Record<string, string | string[] | undefined>;
10+
searchParams: SearchParams;
1011
}
1112

1213
export function Pagination({

src/app/(public)/repos/[language]/page.tsx

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,27 @@ import { RepoCard } from './_components/repo-card';
88
import { Sorter } from './_components/sorter';
99
import { StarsFilter } from './_components/stars-filter';
1010
import { Pagination } from './_components/pagination';
11-
import { Suspense } from 'react';
12-
import type { RepoData, RepoItem, RepoResponse } from '@/types';
11+
import type { RepoData, RepoItem, RepoResponse, SearchParams } from '@/types';
1312
import type { Metadata } from 'next';
1413
import { auth } from '@/auth';
1514

1615
interface ReposPageProps {
17-
params: { language: string };
18-
searchParams: Record<string, string | string[] | undefined>;
16+
params: Promise<{ language: string }>;
17+
searchParams: Promise<SearchParams>;
1918
}
2019

2120
export default async function ReposPage({
22-
params: { language },
21+
params,
2322
searchParams
2423
}: ReposPageProps) {
25-
const key = JSON.stringify(searchParams);
26-
const { repos, page } = await getRepos(language, searchParams);
24+
const { language } = await params;
25+
const sp = await searchParams;
26+
27+
const key = JSON.stringify(sp);
28+
const { repos, page } = await getRepos(language, sp);
2729

2830
return (
29-
<Suspense fallback={<p>Loading...</p>} key={key}>
31+
<>
3032
<Header />
3133
<ScrollToTop />
3234
<div className="container mx-auto">
@@ -36,10 +38,8 @@ export default async function ReposPage({
3638
<h1 className="mb-5 text-5xl font-medium uppercase text-hacktoberfest-light-green">
3739
{repos.total_count} repositories for{' '}
3840
<span className="font-mono font-bold text-hacktoberfest-pink">
39-
{searchParams.q
40-
? searchParams.q +
41-
' in ' +
42-
capitalize(decodeURIComponent(language))
41+
{sp.q
42+
? sp.q + ' in ' + capitalize(decodeURIComponent(language))
4343
: capitalize(decodeURIComponent(language))}
4444
</span>
4545
</h1>
@@ -56,22 +56,25 @@ export default async function ReposPage({
5656
<Pagination
5757
page={page}
5858
totalCount={repos.total_count}
59-
searchParams={searchParams}
59+
searchParams={sp}
6060
/>
6161
</div>
62-
</Suspense>
62+
</>
6363
);
6464
}
6565

66-
export function generateMetadata({ params }: ReposPageProps): Metadata {
66+
export async function generateMetadata({
67+
params
68+
}: ReposPageProps): Promise<Metadata> {
69+
const { language } = await params;
6770
return {
68-
title: `${capitalize(decodeURIComponent(params.language))} Repositories`
71+
title: `${capitalize(decodeURIComponent(language))} Repositories`
6972
};
7073
}
7174

7275
async function getRepos(
7376
language: string,
74-
searchParams: ReposPageProps['searchParams']
77+
searchParams: SearchParams
7578
): Promise<RepoResponse> {
7679
const client = getXataClient();
7780
const session = await auth();
@@ -144,7 +147,7 @@ async function getRepos(
144147

145148
async function getReportedRepos() {
146149
const client = getXataClient();
147-
const reports = await client.db.reports
150+
const reports = await client.db.reports
148151
.select(['repoId'])
149152
.filter({ valid: false })
150153
.getMany();

src/app/actions.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { auth, signIn, signOut } from '@/auth';
44
import { sendReportSchema, SendReportSchema } from './validation';
55
import { getXataClient } from '@/xata';
6+
import { z } from 'zod';
67

78
const client = getXataClient();
89

@@ -19,7 +20,7 @@ export async function sendReportAction(data: SendReportSchema) {
1920
if (!session || !session.user) throw new Error('You must be logged in.');
2021
const { success, data: body, error } = sendReportSchema.safeParse(data);
2122

22-
if (!success) return error.formErrors;
23+
if (!success) return z.treeifyError(error);
2324

2425
const user = await client.db.nextauth_users
2526
.filter({ email: session.user.email })

src/components/report-modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export function ReportModal() {
4242
toast.success('Report sent successfully');
4343
setRepo(null);
4444
} else {
45-
toast.error(response.formErrors.join(', '));
45+
toast.error(response.errors.join(', '));
4646
}
4747
} catch (err: any) {
4848
toast.error(err.message);

src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,5 @@ export interface RepoResponse {
128128
languageName: string;
129129
repos: RepoData;
130130
}
131+
132+
export type SearchParams = Record<string, string | string[] | undefined>;

0 commit comments

Comments
 (0)