Skip to content

Commit efb97b7

Browse files
authored
Merge pull request #2 from ridi/dev/ridi-event/0.1
Update EventClient following event spec r0.1
2 parents 92e12bd + b5ba389 commit efb97b7

File tree

6 files changed

+39
-74
lines changed

6 files changed

+39
-74
lines changed

README.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,26 @@
1414
<body>
1515
<script src="./dist/umd/bundle.min.js"></script>
1616
<script>
17-
var client = new EventClient({
17+
var eventClient = new client({
1818
deviceType: 'pc',
19-
uId: 'uId',
19+
uId: 123456,
2020
debug: true,
21-
development: true,
22-
tagManagerOptions: {
23-
trackingId: "GTM-ID"
24-
},
2521
autoPageView: true,
22+
trackingId: "GTM-5XSZZGH",
2623
});
27-
client.initialize();
28-
client.sendPurchase(...);
2924
25+
eventClient.setUId(12345678);
26+
27+
28+
eventClient.sendAddPaymentInfo('payment_type', {
29+
value: 1,
30+
currency: 'KRW',
31+
items: [
32+
{item_id: 'item_id', item_name: 'abcd', item_category: 123456, service_type: 'ridibooks'}
33+
]
34+
});
3035
</script>
31-
<script>
32-
</script>
36+
3337
</body>
3438
</html>
3539
```

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ridi/ridi-event-client",
3-
"version": "0.1.0",
3+
"version": "0.2.0",
44
"description": "Ridibooks event tracking client",
55
"main": "dist/cjs/index.js",
66
"typings": "dist/typings/index.d.ts",

src/eventClient.ts

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,11 @@ import { convertKeyToSnakeCase } from './utils/util';
77
export interface ClientOptions {
88
trackingId: string;
99
debug?: boolean;
10-
development?: boolean;
1110
uId?: number;
1211
autoPageView?: boolean;
1312
deviceType: DeviceType;
1413
}
1514

16-
/* eslint-disable camelcase */
17-
export interface PageMeta {
18-
page: string;
19-
device: DeviceType;
20-
query_params: { [key: string]: string | undefined };
21-
path: string;
22-
href: string;
23-
referrer: string;
24-
}
25-
26-
/* eslint-enable camelcase */
27-
2815
declare global {
2916
interface Window {
3017
dataLayer?: Record<string, any>[];
@@ -39,7 +26,17 @@ export class EventClient {
3926
this.options.autoPageView = true;
4027
}
4128

42-
this.pushDataLayer({ ...options });
29+
loadTagManager(this.options.trackingId);
30+
31+
this.tagCalled = true;
32+
33+
this.pushDataLayer({ event: 'Init', ...options });
34+
}
35+
36+
public setUId(uId: number): void {
37+
this.options.uId = uId;
38+
39+
this.pushDataLayer(this.options);
4340
}
4441

4542
private get dataLayer() {
@@ -57,27 +54,6 @@ export class EventClient {
5754
this.dataLayer.push(data);
5855
}
5956

60-
private getPageMeta(href: string, referrer = ''): PageMeta {
61-
const url = new URL(href, {}, true);
62-
63-
const path = url.pathname;
64-
65-
return {
66-
page: url.pathname.split('/')[1] || 'index',
67-
device: this.options.deviceType,
68-
query_params: url.query,
69-
path,
70-
href,
71-
referrer,
72-
};
73-
}
74-
75-
public async initialize(): Promise<void> {
76-
this.pushDataLayer(this.options);
77-
await loadTagManager(this.options.trackingId);
78-
this.tagCalled = true;
79-
}
80-
8157
public sendEvent(
8258
name: string,
8359
data: Record<string, any> = {},
@@ -88,7 +64,11 @@ export class EventClient {
8864
ts = new Date();
8965
}
9066

91-
const dataLayerValues = { event: name, event_params: data, ts };
67+
const dataLayerValues = {
68+
event: name,
69+
event_params: { data, uId: this.options.uId },
70+
ts: ts.getTime(),
71+
};
9272

9373
if (this.options.debug) {
9474
console.group(`[@ridi/ridi-event-client] Sending '${name}' event`);
@@ -105,14 +85,13 @@ export class EventClient {
10585
return this.tagCalled;
10686
}
10787

108-
public sendPageView(href: string, referrer?: string, ts?: Date): void {
88+
public sendPageView(ts?: Date): void {
10989
if (this.options.autoPageView) {
11090
throw new Error(
11191
'[@ridi/ridi-event-client] autoPageView option enabled. Do not call this method manually',
11292
);
11393
}
114-
const pageMeta = this.getPageMeta(href, referrer);
115-
this.sendEvent('PageView', { ...pageMeta }, ts);
94+
this.sendEvent('PageView', {}, ts);
11695
}
11796

11897
public sendScreenView(
@@ -152,7 +131,7 @@ export class EventClient {
152131
this.sendEvent('EnrollPreference', { items }, ts);
153132
}
154133

155-
public sendUnenrollPreferences(items: Item[], ts?: Date): void {
134+
public sendUnenrollPreference(items: Item[], ts?: Date): void {
156135
this.sendEvent('UnenrollPreference', { items }, ts);
157136
}
158137

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from './constants';
22
export * from './models';
3+
export * from './eventClient';

src/utils/externalServices.ts

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,8 @@
1-
function addScriptLoadListener(
2-
scriptElement: HTMLScriptElement,
3-
): Promise<void> {
4-
const listener = new Promise<void>(resolve => {
5-
const callback = () => {
6-
scriptElement.removeEventListener('load', callback);
7-
resolve();
8-
};
9-
scriptElement.addEventListener('load', callback);
10-
});
11-
12-
const timeout = new Promise<void>((_, reject) => {
13-
setTimeout(() => {
14-
reject('Failed to load Script.');
15-
}, 5000);
16-
});
17-
18-
return Promise.race([listener, timeout]);
19-
}
201

212
export function loadTagManager(id: string) {
22-
return addScriptLoadListener((function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
3+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
234
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
245
j:any=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
25-
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);return j;
26-
})(window as any,document,'script','dataLayer',id));
6+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
7+
})(window as any,document,'script','dataLayer',id);
278
}

0 commit comments

Comments
 (0)