Skip to content

Commit 684c5aa

Browse files
Feat: CTA action to request demo (#153)
* Feat: CTA action to request demo * Fix formatting * Fix playwright
1 parent eafbb81 commit 684c5aa

File tree

5 files changed

+62
-6
lines changed

5 files changed

+62
-6
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"use client";
2+
3+
import { Button } from "@/components/ui/button";
4+
import type { SupportedLanguage } from "@/locales/.generated/types";
5+
import { servicesRequestDemo } from "@/locales/.generated/server";
6+
7+
export default function RequestDemoButton({
8+
lang,
9+
service
10+
}: {
11+
lang: SupportedLanguage;
12+
service: string;
13+
}) {
14+
const handleChatbot = () => {
15+
window.dispatchEvent(
16+
new CustomEvent("prefillAIAgent", {
17+
detail: { message: `I want to request a demo for ${service}` }
18+
})
19+
);
20+
};
21+
return (
22+
<>
23+
<Button
24+
variant="default"
25+
size="lg"
26+
className="bg-hyperjump-blue hover:bg-hyperjump-blue/90 text-md w-full max-w-sm"
27+
data-testid="request-demo-button"
28+
onClick={handleChatbot}>
29+
{servicesRequestDemo(lang)}
30+
</Button>
31+
</>
32+
);
33+
}

app/[lang]/(hyperjump)/services/[slug]/page.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
import type { CaseStudy, Service } from "../../data";
2727
import { serviceBySlug, ServiceSlug } from "../../data";
2828
import { dynamicOpengraph } from "@/lib/default-metadata";
29+
import RequestDemoButton from "./components/request-demo-button";
2930

3031
type LangProps = {
3132
lang: SupportedLanguage;
@@ -84,14 +85,15 @@ export default async function ServiceDetail({ params }: ServiceDetailProps) {
8485
<Hero
8586
hero={{ heading: service.title, subheading: service.shortDescription }}
8687
/>
87-
<About service={service} />
88+
<About lang={lang} service={service} />
8889
<WhoIsIt lang={lang} service={service} />
8990
<WhatWeDeliver lang={lang} service={service} />
9091
<Product lang={lang} service={service} />
9192
<HowItWorks lang={lang} service={service} />
9293
<WhatYouGet lang={lang} service={service} />
9394
<WhyUs lang={lang} service={service} />
9495
<Recommendation caseStudies={service.caseStudies} lang={lang} />
96+
<CallToAction lang={lang} service={service} />
9597
</>
9698
);
9799
}
@@ -134,24 +136,28 @@ function Hero({ hero: { heading, subheading } }: HeroProps) {
134136

135137
type ServiceProps = {
136138
service: Service;
139+
lang: SupportedLanguage;
137140
};
138141

139-
function About({ service }: ServiceProps) {
142+
function About({ lang, service }: LangProps & ServiceProps) {
140143
const {
141144
content: { what },
142145
title
143146
} = service;
144147

145148
return (
146149
<section className="bg-[#F6F8F9] py-8 md:py-16">
147-
<div className="text-hyperjump-black mx-auto flex w-full max-w-4xl flex-wrap items-center px-4 py-10 md:px-20 md:py-20 xl:px-0">
148-
<h2 className="mb-5 text-[34px] font-medium md:text-4xl">{title}</h2>
150+
<div className="text-hyperjump-black mx-auto flex w-full max-w-4xl flex-col flex-wrap items-center gap-5 px-4 py-10 md:px-20 md:py-20 xl:px-0">
151+
<h2 className="self-start text-[34px] font-medium md:text-4xl">
152+
{title}
153+
</h2>
149154
<p
150155
className="text-xl leading-relaxed"
151156
dangerouslySetInnerHTML={{
152157
__html: `${what}`
153158
}}
154159
/>
160+
<RequestDemoButton lang={lang} service={title} />
155161
</div>
156162
</section>
157163
);
@@ -496,3 +502,11 @@ function Product({ lang, service }: LangProps & ServiceProps) {
496502
</section>
497503
);
498504
}
505+
506+
function CallToAction({ lang, service }: LangProps & ServiceProps) {
507+
return (
508+
<section className="flex items-center justify-center bg-white px-4 pb-8 md:px-20 md:pb-16">
509+
<RequestDemoButton lang={lang} service={service.title} />
510+
</section>
511+
);
512+
}

e2e/services-detail.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ for (const { code: locale, path, title, slug } of locales) {
166166
const n = await cardLinks.count();
167167
for (let i = 0; i < n; i++) {
168168
const link = cardLinks.nth(i);
169+
170+
if (
171+
(await link.getAttribute("data-testid")) === "request-demo-button"
172+
) {
173+
continue;
174+
}
175+
169176
await expect(link).toBeVisible();
170177
const href = await link.getAttribute("href");
171178
expect(href).toBeTruthy();

locales/en/services.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
"partners": {
1616
"Heading": "Trusted by industry leaders",
1717
"desc": "We're proud to be trusted by companies across industries. These are just a few of them, many more continue to grow with us behind the scenes."
18-
}
18+
},
19+
"request_demo": "Request demo"
1920
}

locales/id/services.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
"partners": {
1616
"Heading": "Dipercaya oleh pemimpin industri",
1717
"desc": "Kami dipercaya oleh berbagai perusahaan lintas industri. Ini hanya sebagian, masih banyak lagi yang berkembang bersama kami di balik layar."
18-
}
18+
},
19+
"request_demo": "Ajukan demo"
1920
}

0 commit comments

Comments
 (0)