Skip to content

Commit 625c822

Browse files
authored
Chore: Upgrade to Next.js 15 (#23)
* chore: upgrade to next.js 15 * chore: fix code format
1 parent 8eb1e33 commit 625c822

File tree

30 files changed

+367
-6497
lines changed

30 files changed

+367
-6497
lines changed
Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
import ScrollObserver from "@/app/components/scroll-observer";
2-
import { SupportedLanguage } from "@/locales/.generated/types";
2+
import type { SupportedLanguage } from "@/locales/.generated/types";
33
import Footer from "../components/footer";
44
import Hero from "../components/hero";
55
import Nav from "../components/nav";
66

7-
export default function InferenceAILangLayout({
7+
type InferenceAILangLayoutProps = {
8+
children: React.ReactNode;
9+
params: Promise<{ lang: SupportedLanguage }>;
10+
};
11+
12+
export default async function InferenceAILangLayout({
813
children,
914
params
10-
}: {
11-
children: React.ReactNode;
12-
params: { lang: string };
13-
}) {
15+
}: InferenceAILangLayoutProps) {
16+
const { lang } = await params;
17+
1418
return (
1519
<>
1620
<ScrollObserver />
17-
<Nav lang={params.lang as SupportedLanguage} />
18-
<Hero lang={params.lang as SupportedLanguage} />
21+
<Nav lang={lang} />
22+
<Hero lang={lang} />
1923
{children}
20-
<Footer lang={params.lang as SupportedLanguage} />
24+
<Footer lang={lang} />
2125
</>
2226
);
2327
}

app/(inferenceai)/inferenceai/[lang]/page.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ export const generateStaticParams = async () => {
55
return [{ lang: "en" }, { lang: "id" }];
66
};
77

8-
export default function InferenceAIPage({
9-
params
10-
}: {
11-
params: { lang: SupportedLanguage };
12-
}) {
13-
return <Home lang={params.lang} />;
8+
type InferenceAIProps = {
9+
params: Promise<{ lang: SupportedLanguage }>;
10+
};
11+
12+
export default async function InferenceAIPage({ params }: InferenceAIProps) {
13+
return <Home lang={(await params).lang} />;
1414
}

app/(inferenceai)/inferenceai/components/hero-cta-button.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Link from "next/link";
55

66
import { Button } from "@/components/ui/button";
77
import data from "@/data.json";
8-
import { SupportedLanguage } from "@/locales/.generated/types";
8+
import type { SupportedLanguage } from "@/locales/.generated/types";
99
import { inferenceaiCtaLabel } from "@/locales/.generated/server";
1010

1111
export function HeroCTAButton({ lang }: { lang: SupportedLanguage }) {

app/(inferenceai)/inferenceai/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ export async function generateMetadata(): Promise<Metadata> {
3434

3535
export default function NoLangInferenceAI() {
3636
return (
37-
<InferenceAILangLayout params={{ lang: "en" }}>
38-
<InferenceAIPage params={{ lang: "en" }} />
37+
<InferenceAILangLayout params={Promise.resolve({ lang: "en" })}>
38+
<InferenceAIPage params={Promise.resolve({ lang: "en" })} />
3939
</InferenceAILangLayout>
4040
);
4141
}

app/(main)/[lang]/home.tsx

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import Image from "next/image";
2-
import Link from "next/link";
31
import type { Metadata } from "next";
42
import type { Organization, WebPage, WithContext } from "schema-dts";
53

@@ -9,7 +7,6 @@ import {
97
AccordionItem,
108
AccordionTrigger
119
} from "@/components/ui/accordion";
12-
import { Button } from "@/components/ui/button";
1310
import { Card, CardContent, CardHeader } from "@/components/ui/card";
1411
import GridItemsContainer, {
1512
GridItems,
@@ -28,11 +25,12 @@ import {
2825
mainProjectDesc,
2926
mainFaqHeading,
3027
mainFaqDesc,
31-
mainViewMore,
32-
mainOpenInGoogleMaps,
33-
mainOurLocation
28+
mainViewMore
3429
} from "@/locales/.generated/server";
3530
import { getServices, getCaseStudies, getProject, getFaqs } from "./data";
31+
import { Location } from "./location";
32+
import { Button } from "@/components/ui/button";
33+
import Link from "next/link";
3634

3735
const {
3836
hero: { heading, subheading },
@@ -180,65 +178,6 @@ function Faqs({ lang }: { lang: SupportedLanguage }) {
180178
);
181179
}
182180

183-
function Location({ lang }: { lang: SupportedLanguage }) {
184-
const { address, duns, email, imageUrl, mapsUrl, title } = location;
185-
186-
return (
187-
<GridItemsContainer>
188-
<GridItemsTitle title={mainOurLocation(lang)} layout="vertical" />
189-
<div className="mb-6 mt-8 grid w-full grid-cols-1 overflow-hidden rounded shadow-lg lg:grid-cols-4">
190-
<div className="relative col-span-1 overflow-hidden p-6 text-white">
191-
<div className="absolute inset-0 z-0">
192-
<Image
193-
src="/images/swatch.svg"
194-
alt="Location background"
195-
width={1440}
196-
height={308}
197-
className="pointer-events-none h-full select-none object-cover"
198-
style={{
199-
background:
200-
"linear-gradient(134.7deg, #5954DA 3.43%, #0B0B0D 48.93%)"
201-
}}
202-
/>
203-
</div>
204-
<div className="relative z-20">
205-
<h2 className="mb-4 text-lg font-bold">{title}</h2>
206-
<div className="mb-2 text-sm leading-relaxed">
207-
{address.map((line, index) => (
208-
<p key={index}>{line}</p>
209-
))}
210-
</div>
211-
<p className="mb-2 mt-4 text-sm">
212-
Email:{" "}
213-
<a
214-
href={`mailto:${email}`}
215-
className="transition-colors hover:text-hyperjump-blue">
216-
{email}
217-
</a>
218-
</p>
219-
<p className="mb-4 text-sm">D&B D-U-N-S: {duns}</p>
220-
<Button asChild variant="outline" className="bg-transparent">
221-
<Link href={mapsUrl} target="_blank" rel="noopener noreferrer">
222-
{mainOpenInGoogleMaps(lang)}
223-
</Link>
224-
</Button>
225-
</div>
226-
</div>
227-
228-
<div className="col-span-1 lg:col-span-3">
229-
<Image
230-
src={imageUrl}
231-
alt={title}
232-
width={1072}
233-
height={500}
234-
className="h-[300px] w-full object-cover object-right lg:h-[500px] lg:object-center"
235-
/>
236-
</div>
237-
</div>
238-
</GridItemsContainer>
239-
);
240-
}
241-
242181
function JsonLd() {
243182
return (
244183
<>

app/(main)/[lang]/language-picker.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
"use client";
22

33
import {
4-
SupportedLanguage,
4+
type SupportedLanguage,
55
supportedLanguages
66
} from "@/locales/.generated/types";
77

8+
type LanguagePickerProps = {
9+
lang: SupportedLanguage;
10+
type?: "hyperjump" | "services";
11+
};
12+
813
const labelByLang: Record<SupportedLanguage, string> = {
914
en: "🇬🇧 English",
1015
id: "🇮🇩 Indonesia"
@@ -13,10 +18,7 @@ const labelByLang: Record<SupportedLanguage, string> = {
1318
export function LanguagePicker({
1419
lang,
1520
type = "hyperjump"
16-
}: {
17-
lang: SupportedLanguage;
18-
type?: "hyperjump" | "services";
19-
}) {
21+
}: LanguagePickerProps) {
2022
const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
2123
const newLang = e.target.value as SupportedLanguage;
2224
window.location.href =

app/(main)/[lang]/layout.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@ import Footer from "@/app/components/footer";
22
import { Hero } from "@/app/components/hero";
33
import Nav from "@/app/components/nav";
44
import ScrollObserver from "@/app/components/scroll-observer";
5-
import { SupportedLanguage } from "@/locales/.generated/types";
5+
import type { SupportedLanguage } from "@/locales/.generated/types";
66

7-
export default function MainLangLayout({
7+
type MainLangLayoutProps = {
8+
children: React.ReactNode;
9+
params: Promise<{ lang: SupportedLanguage }>;
10+
};
11+
12+
export default async function MainLangLayout({
813
children,
914
params
10-
}: {
11-
children: React.ReactNode;
12-
params: { lang: string };
13-
}) {
15+
}: MainLangLayoutProps) {
16+
const { lang } = await params;
17+
1418
return (
1519
<>
1620
<ScrollObserver />
17-
<Nav isTransparent lang={params.lang as SupportedLanguage} />
18-
<Hero lang={params.lang as SupportedLanguage} />
21+
<Nav isTransparent lang={lang} />
22+
<Hero lang={lang} />
1923
{children}
20-
<Footer lang={params.lang as SupportedLanguage} />
24+
<Footer lang={lang} />
2125
</>
2226
);
2327
}

app/(main)/[lang]/location.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"use client";
2+
3+
import Image from "next/image";
4+
import Link from "next/link";
5+
6+
import GridItemsContainer, {
7+
GridItemsTitle
8+
} from "@/app/components/grid-items";
9+
import { Button } from "@/components/ui/button";
10+
import data from "@/data.json";
11+
import {
12+
mainOpenInGoogleMaps,
13+
mainOurLocation
14+
} from "@/locales/.generated/server";
15+
import type { SupportedLanguage } from "@/locales/.generated/types";
16+
17+
type LocationProps = { lang: SupportedLanguage };
18+
19+
export function Location({ lang }: LocationProps) {
20+
const { address, duns, email, imageUrl, mapsUrl, title } = data.location;
21+
22+
return (
23+
<GridItemsContainer>
24+
<GridItemsTitle title={mainOurLocation(lang)} layout="vertical" />
25+
<div className="mb-6 mt-8 grid w-full grid-cols-1 overflow-hidden rounded shadow-lg lg:grid-cols-4">
26+
<div className="relative col-span-1 overflow-hidden p-6 text-white">
27+
<div className="absolute inset-0 z-0">
28+
<Image
29+
src="/images/swatch.svg"
30+
alt="Location background"
31+
width={1440}
32+
height={308}
33+
className="pointer-events-none h-full select-none object-cover"
34+
style={{
35+
background:
36+
"linear-gradient(134.7deg, #5954DA 3.43%, #0B0B0D 48.93%)"
37+
}}
38+
/>
39+
</div>
40+
<div className="relative z-20">
41+
<h2 className="mb-4 text-lg font-bold">{title}</h2>
42+
<div className="mb-2 text-sm leading-relaxed">
43+
{address.map((line, index) => (
44+
<p key={index}>{line}</p>
45+
))}
46+
</div>
47+
<p className="mb-2 mt-4 text-sm">
48+
Email:{" "}
49+
<a
50+
href={`mailto:${email}`}
51+
className="transition-colors hover:text-hyperjump-blue">
52+
{email}
53+
</a>
54+
</p>
55+
<p className="mb-4 text-sm">D&B D-U-N-S: {duns}</p>
56+
<Button asChild variant="outline" className="bg-transparent">
57+
<Link href={mapsUrl} target="_blank" rel="noopener noreferrer">
58+
{mainOpenInGoogleMaps(lang)}
59+
</Link>
60+
</Button>
61+
</div>
62+
</div>
63+
64+
<div className="col-span-1 lg:col-span-3">
65+
<Image
66+
src={imageUrl}
67+
alt={title}
68+
width={1072}
69+
height={500}
70+
className="h-[300px] w-full object-cover object-right lg:h-[500px] lg:object-center"
71+
/>
72+
</div>
73+
</div>
74+
</GridItemsContainer>
75+
);
76+
}

app/(main)/[lang]/page.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { SupportedLanguage } from "@/locales/.generated/types";
1+
import type { SupportedLanguage } from "@/locales/.generated/types";
22
import Home from "./home";
33

44
export const generateStaticParams = async () => {
55
return [{ lang: "en" }, { lang: "id" }];
66
};
77

8-
export default function MainPage({
9-
params
10-
}: {
11-
params: { lang: SupportedLanguage };
12-
}) {
13-
return <Home lang={params.lang} />;
8+
type HomepageProps = {
9+
params: Promise<{ lang: SupportedLanguage }>;
10+
};
11+
12+
export default async function MainPage({ params }: HomepageProps) {
13+
return <Home lang={(await params).lang} />;
1414
}

app/(main)/components/case-studies-cta.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import { sendGAEvent } from "@next/third-parties/google";
44
import Link from "next/link";
5+
import Image from "next/image";
56
import { Button } from "@/components/ui/button";
67
import data from "@/data.json";
7-
import Image from "next/image";
8-
import { SupportedLanguage } from "@/locales/.generated/types";
98
import {
109
mainCaseStudiesCtaDesc,
1110
mainCaseStudiesCtaHeading,
1211
mainCtaLabel
1312
} from "@/locales/.generated/server";
13+
import type { SupportedLanguage } from "@/locales/.generated/types";
1414

1515
export function CaseStudiesCTA({ lang }: { lang: SupportedLanguage }) {
1616
const { gaEventName, link } = data.cta;

0 commit comments

Comments
 (0)