Skip to content

Commit 4f35882

Browse files
authored
Unify layout and fix tracking of ask_question (#3610)
1 parent abbae3e commit 4f35882

File tree

8 files changed

+179
-121
lines changed

8 files changed

+179
-121
lines changed

.changeset/ten-files-talk.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"gitbook": patch
3+
---
4+
5+
Fix event ask_question not being tracked

packages/gitbook/src/app/sites/dynamic/[mode]/[siteURL]/[siteData]/~gitbook/embed/layout.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
generateEmbeddableViewport,
66
} from '@/components/Embeddable';
77
import { getEmbeddableStaticContext } from '@/lib/embeddable';
8+
import { shouldTrackEvents } from '@/lib/tracking';
9+
import { headers } from 'next/headers';
810

911
interface SiteStaticLayoutProps {
1012
params: Promise<RouteLayoutParams>;
@@ -14,9 +16,18 @@ export default async function RootLayout({
1416
params,
1517
children,
1618
}: React.PropsWithChildren<SiteStaticLayoutProps>) {
17-
const { context } = await getEmbeddableStaticContext(await params);
19+
const { context, visitorAuthClaims } = await getEmbeddableStaticContext(await params);
20+
const withTracking = shouldTrackEvents(await headers());
1821

19-
return <EmbeddableRootLayout context={context}>{children}</EmbeddableRootLayout>;
22+
return (
23+
<EmbeddableRootLayout
24+
context={context}
25+
withTracking={withTracking}
26+
visitorAuthClaims={visitorAuthClaims}
27+
>
28+
{children}
29+
</EmbeddableRootLayout>
30+
);
2031
}
2132

2233
export async function generateViewport({ params }: SiteStaticLayoutProps) {

packages/gitbook/src/app/sites/static/[mode]/[siteURL]/[siteData]/~gitbook/embed/layout.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
generateEmbeddableViewport,
66
} from '@/components/Embeddable';
77
import { getEmbeddableStaticContext } from '@/lib/embeddable';
8+
import { shouldTrackEvents } from '@/lib/tracking';
89

910
interface SiteStaticLayoutProps {
1011
params: Promise<RouteLayoutParams>;
@@ -14,9 +15,18 @@ export default async function RootLayout({
1415
params,
1516
children,
1617
}: React.PropsWithChildren<SiteStaticLayoutProps>) {
17-
const { context } = await getEmbeddableStaticContext(await params);
18+
const { context, visitorAuthClaims } = await getEmbeddableStaticContext(await params);
19+
const withTracking = shouldTrackEvents();
1820

19-
return <EmbeddableRootLayout context={context}>{children}</EmbeddableRootLayout>;
21+
return (
22+
<EmbeddableRootLayout
23+
context={context}
24+
withTracking={withTracking}
25+
visitorAuthClaims={visitorAuthClaims}
26+
>
27+
{children}
28+
</EmbeddableRootLayout>
29+
);
2030
}
2131

2232
export async function generateViewport({ params }: SiteStaticLayoutProps) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from './useAI';
22
export * from './useAIChat';
3+
export type { RenderAIMessageOptions } from './server-actions';

packages/gitbook/src/components/Embeddable/EmbeddableRootLayout.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
1-
import { AIChatProvider, AIContextProvider } from '@/components/AI';
1+
import { AIContextProvider } from '@/components/AI';
22
import { CustomizationRootLayout } from '@/components/RootLayout';
33
import {
44
SiteLayoutClientContexts,
55
generateSiteLayoutMetadata,
66
generateSiteLayoutViewport,
77
} from '@/components/SiteLayout';
8+
import type { VisitorAuthClaims } from '@/lib/adaptive';
89
import type { GitBookSiteContext } from '@/lib/context';
910
import { CustomizationAIMode } from '@gitbook/api';
11+
import { SpaceLayoutServerContext } from '../SpaceLayout';
1012
import { EmbeddableIframeAPI } from './EmbeddableIframeAPI';
1113

1214
type EmbeddableRootLayoutProps = {
1315
context: GitBookSiteContext;
16+
withTracking: boolean;
17+
visitorAuthClaims: VisitorAuthClaims;
1418
};
1519

1620
/**
1721
* Layout component for the embed routes.
1822
*/
1923
export async function EmbeddableRootLayout({
2024
context,
25+
withTracking,
26+
visitorAuthClaims,
2127
children,
2228
}: React.PropsWithChildren<EmbeddableRootLayoutProps>) {
2329
return (
@@ -31,8 +37,11 @@ export async function EmbeddableRootLayout({
3137
aiMode={CustomizationAIMode.Assistant}
3238
trademark={context.customization.trademark.enabled}
3339
>
34-
<AIChatProvider
35-
renderMessageOptions={{
40+
<SpaceLayoutServerContext
41+
context={context}
42+
withTracking={withTracking}
43+
visitorAuthClaims={visitorAuthClaims}
44+
aiChatRenderMessageOptions={{
3645
withLinkPreviews: false,
3746
asEmbeddable: true,
3847
}}
@@ -41,17 +50,17 @@ export async function EmbeddableRootLayout({
4150
<EmbeddableIframeAPI
4251
baseURL={context.linker.toPathInSpace('~gitbook/embed/')}
4352
/>
44-
</AIChatProvider>
53+
</SpaceLayoutServerContext>
4554
</AIContextProvider>
4655
</SiteLayoutClientContexts>
4756
</CustomizationRootLayout>
4857
);
4958
}
5059

51-
export async function generateEmbeddableViewport({ context }: EmbeddableRootLayoutProps) {
60+
export async function generateEmbeddableViewport({ context }: { context: GitBookSiteContext }) {
5261
return generateSiteLayoutViewport(context);
5362
}
5463

55-
export async function generateEmbeddableMetadata({ context }: EmbeddableRootLayoutProps) {
64+
export async function generateEmbeddableMetadata({ context }: { context: GitBookSiteContext }) {
5665
return generateSiteLayoutMetadata(context);
5766
}

packages/gitbook/src/components/Insights/InsightsProvider.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ type TrackEventCallback = <EventName extends InsightsEventName>(
4646
options?: InsightsEventOptions
4747
) => void;
4848

49-
const InsightsContext = React.createContext<TrackEventCallback>(() => {});
49+
const InsightsContext = React.createContext<TrackEventCallback>(() => {
50+
console.error('useTrackEvent must be used within an InsightsProvider');
51+
});
5052

5153
interface InsightsProviderProps {
5254
/** If true, the events will be sent to the server. */

packages/gitbook/src/components/SiteLayout/SiteLayout.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { buildVersion } from '@/lib/build';
1313
import { GITBOOK_API_PUBLIC_URL, GITBOOK_ASSETS_URL, GITBOOK_ICONS_URL } from '@/lib/env';
1414
import { getResizedImageURL } from '@/lib/images';
1515
import { isSiteIndexable } from '@/lib/seo';
16-
import { AIChatProvider, AIContextProvider } from '../AI';
16+
import { AIContextProvider } from '../AI';
1717
import { RocketLoaderDetector } from './RocketLoaderDetector';
1818
import { SiteLayoutClientContexts } from './SiteLayoutClientContexts';
1919

@@ -58,15 +58,13 @@ export async function SiteLayout(props: {
5858
aiMode={customization.ai?.mode}
5959
trademark={customization.trademark.enabled}
6060
>
61-
<AIChatProvider>
62-
<SpaceLayout
63-
context={context}
64-
withTracking={withTracking}
65-
visitorAuthClaims={visitorAuthClaims}
66-
>
67-
{children}
68-
</SpaceLayout>
69-
</AIChatProvider>
61+
<SpaceLayout
62+
context={context}
63+
withTracking={withTracking}
64+
visitorAuthClaims={visitorAuthClaims}
65+
>
66+
{children}
67+
</SpaceLayout>
7068
</AIContextProvider>
7169

7270
{scripts.length > 0 ? (

0 commit comments

Comments
 (0)