-
Notifications
You must be signed in to change notification settings - Fork 190
Expand file tree
/
Copy pathsalesforceViewsPlugin.ts
More file actions
73 lines (61 loc) · 1.81 KB
/
Copy pathsalesforceViewsPlugin.ts
File metadata and controls
73 lines (61 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import type { RumPlugin, RumPublicApi, ViewOptions } from '@datadog/browser-rum-core'
export interface SalesforceViewChange {
pageReference?: unknown
view?: ViewOptions
}
export interface SalesforceViewsPlugin {
plugin: RumPlugin
onPageReferenceChange: (viewChange: SalesforceViewChange) => void
}
export function createSalesforceViewsPlugin(): SalesforceViewsPlugin {
let publicApi: Pick<RumPublicApi, 'startView'> | undefined
let pendingViewChange: SalesforceViewChange | undefined
let lastPageReferenceKey: string | undefined
function onPageReferenceChange(viewChange: SalesforceViewChange) {
const pageReferenceKey = getPageReferenceKey(viewChange.pageReference)
if (pageReferenceKey && pageReferenceKey === lastPageReferenceKey) {
return
}
if (pageReferenceKey) {
lastPageReferenceKey = pageReferenceKey
}
if (!publicApi) {
pendingViewChange = viewChange
return
}
startView(viewChange)
}
function startView(viewChange: SalesforceViewChange) {
if (viewChange.view) {
publicApi?.startView(viewChange.view)
}
}
return {
plugin: {
name: 'salesforce',
onInit({ initConfiguration, publicApi: rumPublicApi }) {
initConfiguration.trackViewsManually = true
publicApi = rumPublicApi
if (pendingViewChange) {
startView(pendingViewChange)
pendingViewChange = undefined
}
},
getConfigurationTelemetry() {
return { views: true }
},
},
onPageReferenceChange,
}
}
function getPageReferenceKey(pageReference: unknown) {
if (pageReference === undefined) {
return undefined
}
try {
return JSON.stringify(pageReference)
} catch {
// eslint-disable-next-line @typescript-eslint/no-base-to-string
return String(pageReference)
}
}