@@ -7,6 +7,12 @@ import {
7
7
} from 'react'
8
8
import type { Seam , SeamClientOptions } from 'seamapi'
9
9
10
+ import {
11
+ type TelemetryClient ,
12
+ TelemetryProvider ,
13
+ useUserTelemetry ,
14
+ } from 'lib/telemetry/index.js'
15
+
10
16
import { useSeamFont } from 'lib/seam/use-seam-font.js'
11
17
import { useSeamStyles } from 'lib/seam/use-seam-styles.js'
12
18
@@ -15,6 +21,8 @@ declare global {
15
21
var seam : SeamProviderProps | undefined
16
22
// eslint-disable-next-line no-var
17
23
var seamQueryClient : QueryClient | undefined
24
+ // eslint-disable-next-line no-var
25
+ var seamTelemetryClient : TelemetryClient | undefined
18
26
}
19
27
20
28
export interface SeamContext {
@@ -48,10 +56,12 @@ export interface SeamProviderPropsWithClientSessionToken
48
56
}
49
57
50
58
interface SeamProviderBaseProps extends PropsWithChildren {
59
+ disableTelemetry ?: boolean | undefined
51
60
disableCssInjection ?: boolean | undefined
52
61
disableFontInjection ?: boolean | undefined
53
62
unminifiyCss ?: boolean | undefined
54
63
queryClient ?: QueryClient | undefined
64
+ telemetryClient ?: TelemetryClient | undefined
55
65
}
56
66
57
67
export type SeamProviderClientOptions = Pick < SeamClientOptions , 'endpoint' >
@@ -60,10 +70,12 @@ const defaultQueryClient = new QueryClient()
60
70
61
71
export function SeamProvider ( {
62
72
children,
73
+ disableTelemetry = false ,
63
74
disableCssInjection = false ,
64
75
disableFontInjection = false ,
65
76
unminifiyCss = false ,
66
77
queryClient,
78
+ telemetryClient,
67
79
...props
68
80
} : SeamProviderProps ) : JSX . Element {
69
81
useSeamStyles ( { disabled : disableCssInjection , unminified : unminifiyCss } )
@@ -93,17 +105,34 @@ export function SeamProvider({
93
105
94
106
const { Provider } = seamContext
95
107
108
+ const endpoint = 'endpoint' in props ? props . endpoint : undefined
109
+
96
110
return (
97
111
< div className = 'seam-components' >
98
- < QueryClientProvider
99
- client = { queryClient ?? globalThis . seamQueryClient ?? defaultQueryClient }
112
+ < TelemetryProvider
113
+ client = { telemetryClient ?? globalThis . seamTelemetryClient }
114
+ disabled = { disableTelemetry }
115
+ endpoint = { endpoint }
100
116
>
101
- < Provider value = { value } > { children } </ Provider >
102
- </ QueryClientProvider >
117
+ < QueryClientProvider
118
+ client = {
119
+ queryClient ?? globalThis . seamQueryClient ?? defaultQueryClient
120
+ }
121
+ >
122
+ < Provider value = { value } >
123
+ < Wrapper > { children } </ Wrapper >
124
+ </ Provider >
125
+ </ QueryClientProvider >
126
+ </ TelemetryProvider >
103
127
</ div >
104
128
)
105
129
}
106
130
131
+ function Wrapper ( { children } : PropsWithChildren ) : JSX . Element | null {
132
+ useUserTelemetry ( )
133
+ return < > { children } </ >
134
+ }
135
+
107
136
const createDefaultSeamContextValue = ( ) : SeamContext => {
108
137
try {
109
138
if ( globalThis . seam == null ) {
0 commit comments