@financial-times/cp-content-pipeline-ui 7.1.1 → 7.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -574,6 +574,20 @@
574
574
  * @financial-times/cp-content-pipeline-client bumped from ^3.7.2 to ^3.7.3
575
575
  * @financial-times/cp-content-pipeline-schema bumped from ^2.10.1 to ^2.10.2
576
576
 
577
+ ## [7.1.3](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v7.1.2...cp-content-pipeline-ui-v7.1.3) (2024-09-27)
578
+
579
+
580
+ ### Bug Fixes
581
+
582
+ * use standard component tracking ([f0ff492](https://github.com/Financial-Times/cp-content-pipeline/commit/f0ff492851625dcf95a58f752ee4c7d3e1321122))
583
+
584
+ ## [7.1.2](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v7.1.1...cp-content-pipeline-ui-v7.1.2) (2024-09-24)
585
+
586
+
587
+ ### Bug Fixes
588
+
589
+ * tracking for ccc ([d21e731](https://github.com/Financial-Times/cp-content-pipeline/commit/d21e7310ca88cd8b9e21af2439c39ae4243eec0f))
590
+
577
591
  ## [7.1.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-ui-v7.1.0...cp-content-pipeline-ui-v7.1.1) (2024-09-17)
578
592
 
579
593
 
@@ -83,6 +83,7 @@ const extraContentForType = {
83
83
  __typename: 'LiveBlogPost',
84
84
  title: 'live post 1',
85
85
  authors: [],
86
+ indicators: {},
86
87
  },
87
88
  ],
88
89
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/components/Body/index.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/components/Body/index.test.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { CustomCodeComponentTracker } from './tracking';
1
2
  /**
2
3
  * CustomCodeComponentClient
3
4
  * @description Track the view of a rendered custom code component
@@ -8,8 +9,9 @@ declare class CustomCodeComponentClient {
8
9
  /**
9
10
  * Track the mount of a custom code component
10
11
  */
11
- private trackingMount;
12
+ tracking: CustomCodeComponentTracker;
12
13
  constructor(el: Element);
13
14
  static init(rootEl?: Element): (CustomCodeComponentClient | undefined)[];
15
+ static destroy(components: CustomCodeComponentClient[]): void;
14
16
  }
15
17
  export default CustomCodeComponentClient;
@@ -1,74 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * TrackMount
5
- * @description Track initial render of a custom code component
6
- * @param {HTMLElement} mountElement - The custom code component
7
- * @param {TrackingData} trackingData - The specific component data
8
- */
9
- class TrackMount {
10
- constructor(mountElement, trackingData) {
11
- this.mountElement = mountElement;
12
- this.trackingData = trackingData;
13
- this.handleMount = () => {
14
- const event = new CustomEvent('oTracking.event', {
15
- detail: {
16
- category: 'component',
17
- action: 'mount',
18
- ...this.trackingData,
19
- },
20
- });
21
- document.body.dispatchEvent(event);
22
- };
23
- this.init();
24
- }
25
- init() {
26
- this.mountElement.addEventListener('ccc-connected', () => {
27
- new TrackView(this.mountElement, this.trackingData);
28
- this.handleMount();
29
- });
30
- }
31
- }
32
- /**
33
- * TrackView
34
- * @description Track the view of a rendered custom code component
35
- * @param {HTMLElement} mountElement - The custom code component
36
- * @param {TrackingData} trackingData - The specific component data
37
- */
38
- class TrackView {
39
- constructor(viewElement, trackingData) {
40
- this.viewElement = viewElement;
41
- this.trackingData = trackingData;
42
- this.handleView = () => {
43
- const event = new CustomEvent('oTracking.event', {
44
- detail: {
45
- category: 'component',
46
- action: 'view',
47
- ...this.trackingData,
48
- },
49
- });
50
- document.body.dispatchEvent(event);
51
- };
52
- this.viewElement = viewElement;
53
- this.trackingData = trackingData;
54
- this.init();
55
- }
56
- init() {
57
- //Intersection observer that observes when viewElement is in view
58
- this.observer = new IntersectionObserver((entries) => {
59
- entries.forEach((entry) => {
60
- if (entry.isIntersecting) {
61
- this.handleView();
62
- this.observer?.disconnect();
63
- }
64
- });
65
- });
66
- this.observer.observe(this.viewElement);
67
- }
68
- destroy() {
69
- this.observer?.disconnect();
70
- }
71
- }
3
+ const tracking_1 = require("./tracking");
72
4
  /**
73
5
  * CustomCodeComponentClient
74
6
  * @description Track the view of a rendered custom code component
@@ -84,12 +16,17 @@ class CustomCodeComponentClient {
84
16
  type: 'custom-code-component',
85
17
  },
86
18
  };
87
- this.trackingMount = new TrackMount(el, trackingData);
19
+ this.tracking = new tracking_1.CustomCodeComponentTracker(el, trackingData);
88
20
  }
89
21
  static init(rootEl) {
90
22
  const root = rootEl instanceof Element ? rootEl : document;
91
23
  return Array.from(root.querySelectorAll('custom-code-component')).map((el) => new CustomCodeComponentClient(el));
92
24
  }
25
+ static destroy(components) {
26
+ components.forEach((component) => {
27
+ component.tracking.destroy();
28
+ });
29
+ }
93
30
  }
94
31
  exports.default = CustomCodeComponentClient;
95
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CustomCodeComponent/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CustomCodeComponent/client/index.ts"],"names":[],"mappings":";;AAAA,yCAAuD;AAEvD;;;;;GAKG;AACH,MAAM,yBAAyB;IAM7B,YAAY,EAAW;QACrB,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC/B,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;gBACnC,IAAI,EAAE,uBAAuB;aAC9B;SACF,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAA0B,CAAC,EAAa,EAAE,YAAY,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAgB;QAC1B,MAAM,IAAI,GAAG,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CACnE,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,yBAAyB,CAAC,EAAE,CAAC,CACnD,CAAA;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,UAAuC;QACpD,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,kBAAe,yBAAyB,CAAA"}
@@ -0,0 +1,31 @@
1
+ type Component = {
2
+ id: string;
3
+ name: string;
4
+ type: string;
5
+ timeElapsedSeconds?: number;
6
+ };
7
+ type TrackingData = {
8
+ component: Component;
9
+ };
10
+ /**
11
+ * CustomCodeComponentTracker
12
+ * @description Track initial render of a custom code component
13
+ * @param {HTMLElement} mountElement - The custom code component
14
+ * @param {TrackingData} trackingData - The specific component data
15
+ */
16
+ declare class CustomCodeComponentTracker {
17
+ private component;
18
+ private trackingData;
19
+ private observer;
20
+ private viewing;
21
+ constructor(component: Element, trackingData: TrackingData);
22
+ private init;
23
+ private onCccConnected;
24
+ private onCccError;
25
+ private onView;
26
+ private onExitView;
27
+ private dispatchEvent;
28
+ private onChange;
29
+ destroy(): void;
30
+ }
31
+ export { CustomCodeComponentTracker };
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomCodeComponentTracker = void 0;
4
+ /**
5
+ * CustomCodeComponentTracker
6
+ * @description Track initial render of a custom code component
7
+ * @param {HTMLElement} mountElement - The custom code component
8
+ * @param {TrackingData} trackingData - The specific component data
9
+ */
10
+ class CustomCodeComponentTracker {
11
+ constructor(component, trackingData) {
12
+ this.component = component;
13
+ this.trackingData = trackingData;
14
+ this.component = component;
15
+ this.trackingData = trackingData;
16
+ this.observer = null;
17
+ this.viewing = false;
18
+ this.init();
19
+ }
20
+ init() {
21
+ this.dispatchEvent('mount');
22
+ this.component.addEventListener('error', this.onCccError.bind(this));
23
+ this.component.addEventListener('ccc-connected', this.onCccConnected.bind(this));
24
+ }
25
+ onCccConnected() {
26
+ this.dispatchEvent('act', { trigger_action: 'success' });
27
+ this.observer = new IntersectionObserver(this.onChange.bind(this), {
28
+ rootMargin: `0px 0px -300px 0px`,
29
+ threshold: 0,
30
+ });
31
+ this.observer.observe(this.component);
32
+ }
33
+ onCccError() {
34
+ this.dispatchEvent('act', { trigger_action: 'error' });
35
+ }
36
+ onView() {
37
+ this.dispatchEvent('view');
38
+ this.viewing = true;
39
+ }
40
+ onExitView() {
41
+ this.dispatchEvent('act', { trigger_action: 'exit-view' });
42
+ this.viewing = false;
43
+ }
44
+ dispatchEvent(action, extraDetail = {}) {
45
+ const event = new CustomEvent('oTracking.event', {
46
+ detail: {
47
+ category: 'component',
48
+ action,
49
+ ...this.trackingData,
50
+ ...extraDetail,
51
+ },
52
+ bubbles: true,
53
+ });
54
+ document.body.dispatchEvent(event);
55
+ }
56
+ onChange(changes) {
57
+ changes.forEach((change) => {
58
+ if (change.target !== this.component) {
59
+ return;
60
+ }
61
+ if (change.boundingClientRect.height > 0 &&
62
+ (change.isIntersecting || change.intersectionRatio >= 1)) {
63
+ this.onView();
64
+ }
65
+ if (this.viewing &&
66
+ (!change.isIntersecting || change.intersectionRatio === 0)) {
67
+ this.onExitView();
68
+ }
69
+ });
70
+ }
71
+ destroy() {
72
+ if (this.observer && this.component) {
73
+ this.observer.unobserve(this.component);
74
+ this.observer.disconnect();
75
+ this.component.removeEventListener('ccc-connected', this.onCccConnected.bind(this));
76
+ this.component.removeEventListener('error', this.onCccError.bind(this));
77
+ if (this.viewing) {
78
+ this.onExitView();
79
+ }
80
+ }
81
+ }
82
+ }
83
+ exports.CustomCodeComponentTracker = CustomCodeComponentTracker;
84
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../../../src/components/CustomCodeComponent/client/tracking.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cp-content-pipeline-ui",
3
- "version": "7.1.1",
3
+ "version": "7.1.3",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -82,6 +82,7 @@ const extraContentForType = {
82
82
  __typename: 'LiveBlogPost',
83
83
  title: 'live post 1',
84
84
  authors: [],
85
+ indicators: {},
85
86
  },
86
87
  ],
87
88
  },
@@ -1,91 +1,4 @@
1
- type Component = {
2
- id: string
3
- name: string
4
- type: string
5
- }
6
-
7
- type TrackingData = {
8
- component: Component
9
- }
10
-
11
- /**
12
- * TrackMount
13
- * @description Track initial render of a custom code component
14
- * @param {HTMLElement} mountElement - The custom code component
15
- * @param {TrackingData} trackingData - The specific component data
16
- */
17
- class TrackMount {
18
- constructor(
19
- private mountElement: Element,
20
- private trackingData: TrackingData
21
- ) {
22
- this.init()
23
- }
24
-
25
- private init() {
26
- this.mountElement.addEventListener('ccc-connected', () => {
27
- new TrackView(this.mountElement as Element, this.trackingData)
28
- this.handleMount()
29
- })
30
- }
31
-
32
- private handleMount = () => {
33
- const event = new CustomEvent('oTracking.event', {
34
- detail: {
35
- category: 'component',
36
- action: 'mount',
37
- ...this.trackingData,
38
- },
39
- })
40
- document.body.dispatchEvent(event)
41
- }
42
- }
43
-
44
- /**
45
- * TrackView
46
- * @description Track the view of a rendered custom code component
47
- * @param {HTMLElement} mountElement - The custom code component
48
- * @param {TrackingData} trackingData - The specific component data
49
- */
50
- class TrackView {
51
- private observer: IntersectionObserver | undefined
52
- constructor(
53
- private viewElement: Element,
54
- private trackingData: TrackingData
55
- ) {
56
- this.viewElement = viewElement as Element
57
- this.trackingData = trackingData
58
- this.init()
59
- }
60
-
61
- private init() {
62
- //Intersection observer that observes when viewElement is in view
63
- this.observer = new IntersectionObserver((entries) => {
64
- entries.forEach((entry) => {
65
- if (entry.isIntersecting) {
66
- this.handleView()
67
- this.observer?.disconnect()
68
- }
69
- })
70
- })
71
- this.observer.observe(this.viewElement as Element)
72
- }
73
-
74
- private handleView = () => {
75
- const event = new CustomEvent('oTracking.event', {
76
- detail: {
77
- category: 'component',
78
- action: 'view',
79
- ...this.trackingData,
80
- },
81
- })
82
- document.body.dispatchEvent(event)
83
- }
84
-
85
- destroy(): void {
86
- this.observer?.disconnect()
87
- }
88
- }
1
+ import { CustomCodeComponentTracker } from './tracking'
89
2
 
90
3
  /**
91
4
  * CustomCodeComponentClient
@@ -97,7 +10,7 @@ class CustomCodeComponentClient {
97
10
  /**
98
11
  * Track the mount of a custom code component
99
12
  */
100
- private trackingMount: TrackMount
13
+ tracking: CustomCodeComponentTracker
101
14
 
102
15
  constructor(el: Element) {
103
16
  const trackingData = {
@@ -107,7 +20,7 @@ class CustomCodeComponentClient {
107
20
  type: 'custom-code-component',
108
21
  },
109
22
  }
110
- this.trackingMount = new TrackMount(el as Element, trackingData)
23
+ this.tracking = new CustomCodeComponentTracker(el as Element, trackingData)
111
24
  }
112
25
 
113
26
  static init(rootEl?: Element): (CustomCodeComponentClient | undefined)[] {
@@ -116,6 +29,12 @@ class CustomCodeComponentClient {
116
29
  (el: Element) => new CustomCodeComponentClient(el)
117
30
  )
118
31
  }
32
+
33
+ static destroy(components: CustomCodeComponentClient[]): void {
34
+ components.forEach((component) => {
35
+ component.tracking.destroy()
36
+ })
37
+ }
119
38
  }
120
39
 
121
40
  export default CustomCodeComponentClient
@@ -0,0 +1,111 @@
1
+ type Component = {
2
+ id: string
3
+ name: string
4
+ type: string
5
+ timeElapsedSeconds?: number
6
+ }
7
+
8
+ type TrackingData = {
9
+ component: Component
10
+ }
11
+
12
+ /**
13
+ * CustomCodeComponentTracker
14
+ * @description Track initial render of a custom code component
15
+ * @param {HTMLElement} mountElement - The custom code component
16
+ * @param {TrackingData} trackingData - The specific component data
17
+ */
18
+ class CustomCodeComponentTracker {
19
+ private observer: IntersectionObserver | null
20
+ private viewing: boolean
21
+
22
+ constructor(private component: Element, private trackingData: TrackingData) {
23
+ this.component = component
24
+ this.trackingData = trackingData
25
+ this.observer = null
26
+ this.viewing = false
27
+ this.init()
28
+ }
29
+
30
+ private init() {
31
+ this.dispatchEvent('mount')
32
+ this.component.addEventListener('error', this.onCccError.bind(this))
33
+ this.component.addEventListener(
34
+ 'ccc-connected',
35
+ this.onCccConnected.bind(this)
36
+ )
37
+ }
38
+
39
+ private onCccConnected(): void {
40
+ this.dispatchEvent('act', { trigger_action: 'success' })
41
+ this.observer = new IntersectionObserver(this.onChange.bind(this), {
42
+ rootMargin: `0px 0px -300px 0px`,
43
+ threshold: 0,
44
+ })
45
+ this.observer.observe(this.component)
46
+ }
47
+
48
+ private onCccError(): void {
49
+ this.dispatchEvent('act', { trigger_action: 'error' })
50
+ }
51
+
52
+ private onView(): void {
53
+ this.dispatchEvent('view')
54
+ this.viewing = true
55
+ }
56
+
57
+ private onExitView(): void {
58
+ this.dispatchEvent('act', { trigger_action: 'exit-view' })
59
+ this.viewing = false
60
+ }
61
+
62
+ private dispatchEvent(action: string, extraDetail = {}): void {
63
+ const event = new CustomEvent('oTracking.event', {
64
+ detail: {
65
+ category: 'component',
66
+ action,
67
+ ...this.trackingData,
68
+ ...extraDetail,
69
+ },
70
+ bubbles: true,
71
+ })
72
+ document.body.dispatchEvent(event)
73
+ }
74
+
75
+ private onChange(changes: IntersectionObserverEntry[]): void {
76
+ changes.forEach((change) => {
77
+ if (change.target !== this.component) {
78
+ return
79
+ }
80
+ if (
81
+ change.boundingClientRect.height > 0 &&
82
+ (change.isIntersecting || change.intersectionRatio >= 1)
83
+ ) {
84
+ this.onView()
85
+ }
86
+ if (
87
+ this.viewing &&
88
+ (!change.isIntersecting || change.intersectionRatio === 0)
89
+ ) {
90
+ this.onExitView()
91
+ }
92
+ })
93
+ }
94
+
95
+ destroy(): void {
96
+ if (this.observer && this.component) {
97
+ this.observer.unobserve(this.component)
98
+ this.observer.disconnect()
99
+ this.component.removeEventListener(
100
+ 'ccc-connected',
101
+ this.onCccConnected.bind(this)
102
+ )
103
+ this.component.removeEventListener('error', this.onCccError.bind(this))
104
+ if (this.viewing) {
105
+ this.onExitView()
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ export { CustomCodeComponentTracker }