Skip to content

Commit 19f8666

Browse files
authored
Merge pull request #1392 from inplayer-org/feat/add-analytics-to-components
Feat/add analytics to components
2 parents 642fe2d + 2ee98a7 commit 19f8666

File tree

12 files changed

+532
-173
lines changed

12 files changed

+532
-173
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
# [2.5.18] - 10.01.2022
6+
7+
## Added
8+
9+
- Handlers for Checkbox, Radiobutton, Daypicker and Datepicker.
10+
- Handler for selected Tab change.
11+
512
# [2.5.17] - 12.11.2021
613

714
## Added

index.d.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,23 @@ export enum AnalyticsEvents {
8181
CLICK = 'click',
8282
DROPDOWN_CHANGE = 'dropdown_change',
8383
DROPDOWN_SELECT = 'dropdown_select',
84+
CHECKBOX_ON = 'checkbox_on',
85+
CHECKBOX_OFF = 'checkbox_off',
86+
RADIOBUTTON_SELECT = 'radiobutton_select',
87+
DATEPICKER_CHANGE = 'datepicker_date_change',
88+
DAYPICKER_CHANGE = 'daypicker_date_change',
8489
}
8590

8691
export enum AnalyticsComponentType {
8792
BUTTON = 'button',
8893
DROPDOWN = 'dropdown',
8994
ICON = 'icon',
9095
LINK = 'link',
96+
CHECKBOX = 'checkbox',
97+
DATEPICKER = 'datepicker',
98+
DAYPICKER = 'daypicker',
99+
DATEPICKER_PRESET = 'datepicker_preset',
100+
TAB = 'tab',
91101
}
92102

93103
export interface Event {
@@ -96,8 +106,8 @@ export interface Event {
96106
type: AnalyticsComponentType | string;
97107
tag: AnalyticsTag;
98108
pages: AnalyticsPage[];
99-
merchantId: number;
100-
ip: string;
109+
merchantId?: number;
110+
ip?: string;
101111
}
102112

103113
export type AnalyticsHandlerFn = (event: Record<string, any>) => void;
@@ -233,12 +243,12 @@ export interface TableOptions<T extends TableRowData> {
233243
headerSection?: Node | JSX.Element | null;
234244
}
235245

236-
export interface TableButtonProps {
246+
interface TableButtonProps extends AnalyticsProps {
237247
label: string;
238248
icon?: string | ReactNode;
239249
onClick: (e: SyntheticEvent) => any;
240250
type: string;
241-
};
251+
}
242252

243253
export interface TableProps<TableData extends TableRowData = TableRowData> extends AnalyticsProps{
244254
columns: Array<TableColumn<TableData>>;

src/analytics/index.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,23 @@ export enum AnalyticsEvents {
4141
CLICK = 'click',
4242
DROPDOWN_CHANGE = 'dropdown_change',
4343
DROPDOWN_SELECT = 'dropdown_select',
44+
CHECKBOX_ON = 'checkbox_on',
45+
CHECKBOX_OFF = 'checkbox_off',
46+
RADIOBUTTON_SELECT = 'radiobutton_select',
47+
DATEPICKER_CHANGE = 'datepicker_date_change',
48+
DAYPICKER_CHANGE = 'daypicker_date_change',
4449
}
4550

4651
export enum AnalyticsComponentType {
4752
BUTTON = 'button',
4853
DROPDOWN = 'dropdown',
4954
ICON = 'icon',
5055
LINK = 'link',
56+
CHECKBOX = 'checkbox',
57+
DATEPICKER = 'datepicker',
58+
DAYPICKER = 'daypicker',
59+
DATEPICKER_PRESET = 'datepicker_preset',
60+
TAB = 'tab',
5161
}
5262

5363
export interface Event {

src/components/Button/Button.tsx

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,20 @@ const Button = ({
7979
modifiers={buttonModifiers}
8080
fullWidth={fullWidth}
8181
fullHeight={fullHeight}
82-
onClick={
83-
!tag
84-
? onClick
85-
: (e) => {
86-
if (onClick) onClick(e);
82+
onClick={(e) => {
83+
onClick?.(e);
8784

88-
tracker.track({
89-
event: AnalyticsEvents.CLICK,
90-
type: AnalyticsComponentType.BUTTON,
91-
tag,
92-
pages,
93-
merchantId,
94-
ip,
95-
});
96-
}
97-
}
85+
if (tag) {
86+
tracker.track({
87+
event: AnalyticsEvents.CLICK,
88+
type: AnalyticsComponentType.BUTTON,
89+
tag,
90+
pages,
91+
merchantId,
92+
ip,
93+
});
94+
}
95+
}}
9896
{...rest}
9997
>
10098
<Content icon={icon} iconPosition={iconPosition}>

src/components/Checkbox/Checkbox.tsx

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import React, { ChangeEvent, RefObject } from 'react';
22
import Label from '../Label';
33
import CheckboxWrapper from './CheckboxWrapper';
4-
import { AnalyticsProps } from '../../analytics';
4+
import {
5+
AnalyticsComponent,
6+
AnalyticsComponentType,
7+
AnalyticsProps,
8+
AnalyticsEvents,
9+
} from '../../analytics';
510

611
type Props = {
712
label: string;
@@ -19,15 +24,50 @@ const Checkbox: React.FC<Props> = ({
1924
onChange,
2025
containerRef = null,
2126
disabled = false,
27+
tag = '',
2228
...rest
2329
}) => {
2430
const onCheckboxChange = (e: ChangeEvent<HTMLInputElement>): any => onChange(e.target.checked);
2531

2632
return (
27-
<CheckboxWrapper ref={containerRef}>
28-
<input disabled={disabled} type="checkbox" id={id} onChange={onCheckboxChange} {...rest} />
29-
<Label htmlFor={id}>{label}</Label>
30-
</CheckboxWrapper>
33+
<AnalyticsComponent>
34+
{({ pages, tracker, merchantId, ip }) => (
35+
<CheckboxWrapper ref={containerRef}>
36+
<input
37+
disabled={disabled}
38+
type="checkbox"
39+
id={id}
40+
onChange={(e) => {
41+
onCheckboxChange(e);
42+
43+
if (tag) {
44+
if (e.target.checked) {
45+
tracker.track({
46+
event: AnalyticsEvents.CHECKBOX_ON,
47+
type: AnalyticsComponentType.CHECKBOX,
48+
tag,
49+
pages,
50+
merchantId,
51+
ip,
52+
});
53+
} else {
54+
tracker.track({
55+
event: AnalyticsEvents.CHECKBOX_OFF,
56+
type: AnalyticsComponentType.CHECKBOX,
57+
tag,
58+
pages,
59+
merchantId,
60+
ip,
61+
});
62+
}
63+
}
64+
}}
65+
{...rest}
66+
/>
67+
<Label htmlFor={id}>{label}</Label>
68+
</CheckboxWrapper>
69+
)}
70+
</AnalyticsComponent>
3171
);
3272
};
3373

0 commit comments

Comments
 (0)