Skip to content

Commit 843689e

Browse files
authored
chore(twenty-website): upgrade next (#14917)
Standardized `PageProps` usage across multiple pages. Upgraded `next`, `eslint-config-next`, and related dependencies to `^15.5.4` for compatibility and performance improvements.
1 parent e40d5c9 commit 843689e

File tree

15 files changed

+550
-166
lines changed

15 files changed

+550
-166
lines changed

packages/twenty-website/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@
2323
"drizzle-kit": "^0.20.14",
2424
"facepaint": "^1.2.1",
2525
"gray-matter": "^4.0.3",
26-
"next": "^14.2.0",
26+
"next": "^15.5.4",
2727
"next-mdx-remote": "^4.4.1",
28-
"next-runtime-env": "^3.2.2",
28+
"next-runtime-env": "^3.3.0",
2929
"postgres": "^3.4.3",
3030
"react-tooltip": "^5.13.1",
3131
"twenty-ui": "workspace:*"
3232
},
3333
"devDependencies": {
34-
"@next/eslint-plugin-next": "^14.1.4",
34+
"@next/eslint-plugin-next": "^15.5.4",
3535
"@types/facepaint": "^1.2.5",
36-
"eslint-config-next": "^15.1.0"
36+
"eslint-config-next": "^15.5.4"
3737
}
3838
}

packages/twenty-website/src/app/(public)/contributors/[slug]/page.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,25 @@ import { PullRequests } from '@/app/_components/contributors/PullRequests';
1313
import { ThankYou } from '@/app/_components/contributors/ThankYou';
1414
import { Background } from '@/app/_components/oss-friends/Background';
1515

16-
export function generateMetadata({
17-
params,
18-
}: {
19-
params: { slug: string };
20-
}): Metadata {
16+
export async function generateMetadata(props: PageProps<'/contributors/[slug]'>): Promise<Metadata> {
17+
const { slug } = await props.params;
2118
return {
2219
metadataBase: new URL(`https://twenty.com`),
23-
title: 'Twenty - ' + params.slug,
20+
title: 'Twenty - ' + slug,
2421
description:
2522
'Explore the impactful contributions of ' +
26-
params.slug +
23+
slug +
2724
' on the Twenty Github Repo. Discover their merged pull requests, ongoing work, and top ranking. Join and contribute to the #1 Open-Source CRM thriving community!',
2825
openGraph: {
29-
images: [`https://twenty.com/api/contributors/${params.slug}/og.png`],
26+
images: [`https://twenty.com/api/contributors/${slug}/og.png`],
3027
},
3128
};
3229
}
3330

34-
export default async function ({ params }: { params: { slug: string } }) {
31+
export default async function Page(props: PageProps<'/contributors/[slug]'>) {
32+
const { slug } = await props.params;
3533
try {
36-
const contributorActivity = await getContributorActivity(params.slug);
34+
const contributorActivity = await getContributorActivity(slug);
3735
if (contributorActivity) {
3836
const {
3937
firstContributionAt,

packages/twenty-website/src/app/(public)/developers/[slug]/page.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,21 @@ import DocsContent from '@/app/_components/docs/DocsContent';
55
import { fetchArticleFromSlug } from '@/shared-utils/fetchArticleFromSlug';
66
import { formatSlug } from '@/shared-utils/formatSlug';
77

8-
export async function generateMetadata({
9-
params,
10-
}: {
11-
params: { slug: string };
12-
}): Promise<Metadata> {
13-
const formattedSlug = formatSlug(params.slug);
8+
export async function generateMetadata(props: PageProps<'/developers/[slug]'>): Promise<Metadata> {
9+
const { slug } = await props.params;
10+
const formattedSlug = formatSlug(slug);
1411
const basePath = '/src/content/developers';
15-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
12+
const mainPost = await fetchArticleFromSlug(slug, basePath);
1613
return {
1714
title: 'Twenty - ' + formattedSlug,
1815
description: mainPost?.itemInfo?.info,
1916
};
2017
}
2118

22-
export default async function DocsSlug({
23-
params,
24-
}: {
25-
params: { slug: string };
26-
}) {
19+
export default async function DocsSlug(props: PageProps<'/developers/[slug]'>) {
20+
const { slug } = await props.params;
2721
const basePath = '/src/content/developers';
28-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
22+
const mainPost = await fetchArticleFromSlug(slug, basePath);
2923
if (!mainPost) {
3024
notFound();
3125
}

packages/twenty-website/src/app/(public)/developers/page.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export const metadata = {
66
description: 'Twenty is a CRM designed to fit your unique business needs.',
77
icons: '/images/core/logo.svg',
88
};
9-
109
export default async function DocsHome() {
1110
const filePath = 'src/content/developers/';
1211
const docsArticleCards = getDocsArticles(filePath);

packages/twenty-website/src/app/(public)/developers/section/[folder]/[documentation]/page.tsx

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,21 @@ import { formatSlug } from '@/shared-utils/formatSlug';
77

88
export const dynamic = 'force-dynamic';
99

10-
export async function generateMetadata({
11-
params,
12-
}: {
13-
params: { folder: string; documentation: string };
14-
}): Promise<Metadata> {
15-
const basePath = `/src/content/developers/${params.folder}`;
16-
const formattedSlug = formatSlug(params.documentation);
17-
const mainPost = await fetchArticleFromSlug(params.documentation, basePath);
10+
export async function generateMetadata(props: PageProps<'/developers/section/[folder]/[documentation]'>): Promise<Metadata> {
11+
const { folder, documentation } = await props.params;
12+
const basePath = `/src/content/developers/${folder}`;
13+
const formattedSlug = formatSlug(documentation);
14+
const mainPost = await fetchArticleFromSlug(documentation, basePath);
1815
return {
1916
title: 'Twenty - ' + formattedSlug,
2017
description: mainPost?.itemInfo?.info,
2118
};
2219
}
2320

24-
export default async function DocsSlug({
25-
params,
26-
}: {
27-
params: { documentation: string; folder: string };
28-
}) {
29-
const basePath = `/src/content/developers/${params.folder}`;
30-
const mainPost = await fetchArticleFromSlug(params.documentation, basePath);
21+
export default async function DocsSlug(props: PageProps<'/developers/section/[folder]/[documentation]'>) {
22+
const { folder, documentation } = await props.params;
23+
const basePath = `/src/content/developers/${folder}`;
24+
const mainPost = await fetchArticleFromSlug(documentation, basePath);
3125
if (!mainPost) {
3226
notFound();
3327
}

packages/twenty-website/src/app/(public)/developers/section/[folder]/page.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,20 @@ import { getDocsArticles } from '@/content/user-guide/constants/getDocsArticles'
66
import { fetchArticleFromSlug } from '@/shared-utils/fetchArticleFromSlug';
77
import { formatSlug } from '@/shared-utils/formatSlug';
88

9-
export async function generateMetadata({
10-
params,
11-
}: {
12-
params: { folder: string };
13-
}): Promise<Metadata> {
14-
const formattedSlug = formatSlug(params.folder);
9+
export async function generateMetadata(props: PageProps<'/developers/section/[folder]'>): Promise<Metadata> {
10+
const { folder } = await props.params;
11+
const formattedSlug = formatSlug(folder);
1512
const basePath = '/src/content/developers';
16-
const mainPost = await fetchArticleFromSlug(params.folder, basePath);
13+
const mainPost = await fetchArticleFromSlug(folder, basePath);
1714
return {
1815
title: 'Twenty - ' + formattedSlug,
1916
description: mainPost?.itemInfo?.info,
2017
};
2118
}
2219

23-
export default async function DocsSlug({
24-
params,
25-
}: {
26-
params: { folder: string };
27-
}) {
28-
const filePath = `src/content/developers/${params.folder}/`;
20+
export default async function DocsSlug(props: PageProps<'/developers/section/[folder]'>) {
21+
const { folder } = await props.params;
22+
const filePath = `src/content/developers/${folder}/`;
2923
const docsArticleCards = getDocsArticles(filePath);
3024
const isSection = true;
3125
const hasOnlyEmptySections = docsArticleCards.every(

packages/twenty-website/src/app/(public)/twenty-ui/[slug]/page.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,21 @@ import { formatSlug } from '@/shared-utils/formatSlug';
77

88
export const dynamic = 'force-dynamic';
99

10-
export async function generateMetadata({
11-
params,
12-
}: {
13-
params: { slug: string };
14-
}): Promise<Metadata> {
15-
const formattedSlug = formatSlug(params.slug);
10+
export async function generateMetadata(props: PageProps<'/twenty-ui/[slug]'>): Promise<Metadata> {
11+
const { slug } = await props.params;
12+
const formattedSlug = formatSlug(slug);
1613
const basePath = '/src/content/twenty-ui';
17-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
14+
const mainPost = await fetchArticleFromSlug(slug, basePath);
1815
return {
1916
title: 'Twenty - ' + formattedSlug,
2017
description: mainPost?.itemInfo?.info,
2118
};
2219
}
2320

24-
export default async function TwentyUISlug({
25-
params,
26-
}: {
27-
params: { slug: string };
28-
}) {
21+
export default async function TwentyUISlug(props: PageProps<'/twenty-ui/[slug]'>) {
22+
const { slug } = await props.params;
2923
const basePath = '/src/content/twenty-ui';
30-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
24+
const mainPost = await fetchArticleFromSlug(slug, basePath);
3125
if (!mainPost) {
3226
notFound();
3327
}

packages/twenty-website/src/app/(public)/twenty-ui/section/[folder]/[documentation]/page.tsx

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,25 @@ import { formatSlug } from '@/shared-utils/formatSlug';
77

88
export const dynamic = 'force-dynamic';
99

10-
export async function generateMetadata({
11-
params,
12-
}: {
13-
params: { folder: string; documentation: string };
14-
}): Promise<Metadata> {
15-
const basePath = `/src/content/twenty-ui/${params.folder}`;
16-
const formattedSlug = formatSlug(params.documentation);
17-
const mainPost = await fetchArticleFromSlug(params.documentation, basePath);
10+
export async function generateMetadata(
11+
props: PageProps<'/twenty-ui/section/[folder]/[documentation]'>,
12+
): Promise<Metadata> {
13+
const { folder, documentation } = await props.params;
14+
const basePath = `/src/content/twenty-ui/${folder}`;
15+
const formattedSlug = formatSlug(documentation);
16+
const mainPost = await fetchArticleFromSlug(documentation, basePath);
1817
return {
1918
title: 'Twenty - ' + formattedSlug,
2019
description: mainPost?.itemInfo?.info,
2120
};
2221
}
2322

24-
export default async function TwentyUISlug({
25-
params,
26-
}: {
27-
params: { documentation: string; folder: string };
28-
}) {
29-
const basePath = `/src/content/twenty-ui/${params.folder}`;
30-
const mainPost = await fetchArticleFromSlug(params.documentation, basePath);
23+
export default async function TwentyUISlug(
24+
props: PageProps<'/twenty-ui/section/[folder]/[documentation]'>,
25+
) {
26+
const { folder, documentation } = await props.params;
27+
const basePath = `/src/content/twenty-ui/${folder}`;
28+
const mainPost = await fetchArticleFromSlug(documentation, basePath);
3129
if (!mainPost) {
3230
notFound();
3331
}

packages/twenty-website/src/app/(public)/twenty-ui/section/[folder]/page.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,24 @@ import { formatSlug } from '@/shared-utils/formatSlug';
88

99
export const dynamic = 'force-dynamic';
1010

11-
export async function generateMetadata({
12-
params,
13-
}: {
14-
params: { folder: string };
15-
}): Promise<Metadata> {
16-
const formattedSlug = formatSlug(params.folder);
11+
export async function generateMetadata(
12+
props: PageProps<'/twenty-ui/section/[folder]'>,
13+
): Promise<Metadata> {
14+
const { folder } = await props.params;
15+
const formattedSlug = formatSlug(folder);
1716
const basePath = '/src/content/twenty-ui';
18-
const mainPost = await fetchArticleFromSlug(params.folder, basePath);
17+
const mainPost = await fetchArticleFromSlug(folder, basePath);
1918
return {
2019
title: 'Twenty - ' + formattedSlug,
2120
description: mainPost?.itemInfo?.info,
2221
};
2322
}
2423

25-
export default async function TwentyUISlug({
26-
params,
27-
}: {
28-
params: { folder: string };
29-
}) {
30-
const filePath = `src/content/twenty-ui/${params.folder}/`;
24+
export default async function TwentyUISlug(
25+
props: PageProps<'/twenty-ui/section/[folder]'>,
26+
) {
27+
const { folder } = await props.params;
28+
const filePath = `src/content/twenty-ui/${folder}/`;
3129
const docsArticleCards = getDocsArticles(filePath);
3230
const isSection = true;
3331
const hasOnlyEmptySections = docsArticleCards.every(

packages/twenty-website/src/app/(public)/user-guide/[slug]/page.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,25 @@ import DocsContent from '@/app/_components/docs/DocsContent';
55
import { fetchArticleFromSlug } from '@/shared-utils/fetchArticleFromSlug';
66
import { formatSlug } from '@/shared-utils/formatSlug';
77

8-
export async function generateMetadata({
9-
params,
10-
}: {
11-
params: { slug: string };
12-
}): Promise<Metadata> {
13-
const formattedSlug = formatSlug(params.slug);
8+
export async function generateMetadata(
9+
props: PageProps<'/user-guide/[slug]'>,
10+
): Promise<Metadata> {
11+
const { slug } = await props.params;
12+
const formattedSlug = formatSlug(slug);
1413
const basePath = '/src/content/user-guide';
15-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
14+
const mainPost = await fetchArticleFromSlug(slug, basePath);
1615
return {
1716
title: 'Twenty - ' + formattedSlug,
1817
description: mainPost?.itemInfo?.info,
1918
};
2019
}
2120

22-
export default async function UserGuideSlug({
23-
params,
24-
}: {
25-
params: { slug: string };
26-
}) {
21+
export default async function UserGuideSlug(
22+
props: PageProps<'/user-guide/[slug]'>,
23+
) {
24+
const { slug } = await props.params;
2725
const basePath = '/src/content/user-guide';
28-
const mainPost = await fetchArticleFromSlug(params.slug, basePath);
26+
const mainPost = await fetchArticleFromSlug(slug, basePath);
2927
if (!mainPost) {
3028
notFound();
3129
}

0 commit comments

Comments
 (0)