Skip to content

Commit 4d309d0

Browse files
authored
fix(Codebytes): tracking tweaks for monolith (#31)
* trackign tweaks for monolith * fix tests * optional trackingdata * optional param for track method * missed another * allow import in monolith
1 parent 2dc5485 commit 4d309d0

File tree

8 files changed

+32
-14
lines changed

8 files changed

+32
-14
lines changed

packages/codebytes/src/__tests__/codebyte-test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,14 @@ describe('CodeBytes', () => {
144144
const { view } = renderWrapper({});
145145
const logo = view.getByLabelText('visit codecademy.com');
146146
userEvent.click(logo);
147-
expect(trackClick).toHaveBeenCalledWith('logo');
147+
expect(trackClick).toHaveBeenCalledWith('logo', undefined);
148148
});
149149

150150
it('triggers trackClick on language selection', () => {
151151
const { view } = renderWrapper();
152152
const selectedLanguage = view.getByRole('combobox') as Element;
153153
userEvent.selectOptions(selectedLanguage, ['javascript']);
154-
expect(trackClick).toHaveBeenCalledWith('lang_select');
154+
expect(trackClick).toHaveBeenCalledWith('lang_select', undefined);
155155
});
156156

157157
it('triggers trackClick for the first edit in view mode', () => {
@@ -164,7 +164,7 @@ describe('CodeBytes', () => {
164164
const editor = view.getByTestId(mockEditorTestId);
165165
userEvent.type(editor, 'd');
166166

167-
expect(trackClick).toHaveBeenCalledWith('edit');
167+
expect(trackClick).toHaveBeenCalledWith('edit', undefined);
168168
});
169169

170170
it('triggers trackUserImpression for view mode', () => {

packages/codebytes/src/__tests__/editor-test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ describe('Editor', () => {
9494
userEvent.click(runButton);
9595
});
9696

97-
expect(trackClick).toHaveBeenCalledWith('run');
97+
expect(trackClick).toHaveBeenCalledWith('run', undefined);
9898
});
9999

100100
it('tracks clicks on the copy codebyte button', () => {
@@ -107,7 +107,7 @@ describe('Editor', () => {
107107
const copyButton = view.getByTestId('copy-codebyte-btn');
108108
userEvent.click(copyButton);
109109

110-
expect(trackClick).toHaveBeenCalledWith('copy');
110+
expect(trackClick).toHaveBeenCalledWith('copy', undefined);
111111
});
112112
});
113113
});

packages/codebytes/src/codeByteEditor.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const CodeByteEditor: React.FC<CodeByteEditorProps> = ({
4343
onEdit,
4444
onLanguageChange,
4545
onCopy,
46+
trackingData,
4647
}) => {
4748
const getInitialText = () => {
4849
if (initialText !== undefined) return initialText;
@@ -78,7 +79,7 @@ export const CodeByteEditor: React.FC<CodeByteEditorProps> = ({
7879
target="_blank"
7980
rel="noreferrer"
8081
aria-label="visit codecademy.com"
81-
onClick={() => trackClick('logo')}
82+
onClick={() => trackClick('logo', trackingData)}
8283
/>
8384
</Box>
8485
{language ? (
@@ -92,11 +93,12 @@ export const CodeByteEditor: React.FC<CodeByteEditorProps> = ({
9293
const { renderMode } = getOptions();
9394
if (!renderMode && hasBeenEdited === false) {
9495
setHasBeenEdited(true);
95-
trackClick('edit');
96+
trackClick('edit', trackingData);
9697
}
9798
}}
9899
snippetsBaseUrl={snippetsBaseUrl}
99100
onCopy={onCopy}
101+
trackingData={trackingData}
100102
/>
101103
) : (
102104
<LanguageSelection
@@ -105,9 +107,8 @@ export const CodeByteEditor: React.FC<CodeByteEditorProps> = ({
105107
text || (newLanguage ? helloWorld[newLanguage] : '');
106108
setLanguage(newLanguage);
107109
setText(newText);
108-
trackClick('lang_select');
110+
trackClick('lang_select', trackingData);
109111
onLanguageChange?.(newText, newLanguage);
110-
trackClick('lang_select');
111112
}}
112113
/>
113114
)}

packages/codebytes/src/editor.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
ToolTip,
77
} from '@codecademy/gamut';
88
import { CopyIcon } from '@codecademy/gamut-icons';
9+
import { UserClickData } from '@codecademy/tracking';
910
import styled from '@emotion/styled';
1011
import React, { useState } from 'react';
1112

@@ -43,6 +44,7 @@ type EditorProps = {
4344
onChange: (text: string) => void;
4445
snippetsBaseUrl?: string;
4546
onCopy?: CodebytesChangeHandler;
47+
trackingData?: Omit<UserClickData, 'target'>;
4648
};
4749

4850
export const Editor: React.FC<EditorProps> = ({
@@ -52,6 +54,7 @@ export const Editor: React.FC<EditorProps> = ({
5254
onChange,
5355
onCopy,
5456
snippetsBaseUrl,
57+
trackingData,
5558
}) => {
5659
const [output, setOutput] = useState('');
5760
const [status, setStatus] = useState<'ready' | 'waiting' | 'error'>('ready');
@@ -64,7 +67,7 @@ export const Editor: React.FC<EditorProps> = ({
6467
.catch(() => console.error('Failed to copy'));
6568
setIsCodeByteCopied(true);
6669
onCopy?.(text, language);
67-
trackClick('copy');
70+
trackClick('copy', trackingData);
6871
}
6972
};
7073

@@ -83,7 +86,7 @@ export const Editor: React.FC<EditorProps> = ({
8386
};
8487
setStatus('waiting');
8588
setOutput('');
86-
trackClick('run');
89+
trackClick('run', trackingData);
8790

8891
try {
8992
const response = await postSnippet(data, snippetsBaseUrl);

packages/codebytes/src/helpers/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { UserClickData } from '@codecademy/tracking';
2+
13
import { trackUserClick } from '../libs/eventTracking';
24

35
export type CodebyteOptions = {
@@ -27,7 +29,16 @@ export const getOptions = (): CodebyteOptions => {
2729
};
2830
};
2931

30-
export const trackClick = (target: string) => {
32+
export const trackClick = (
33+
target: string,
34+
trackingData?: Omit<UserClickData, 'target'>
35+
) => {
36+
if (trackingData) {
37+
return trackUserClick({
38+
...trackingData,
39+
target,
40+
});
41+
}
3142
const options = getOptions();
3243
const page_name = options.renderMode
3344
? `${options.clientName}_${options.renderMode}`

packages/codebytes/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export * from './codeByteEditor';
2-
export { LanguageOption, LanguageOptions } from './consts';
2+
export * from './consts';

packages/codebytes/src/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { UserClickData } from '@codecademy/tracking';
2+
13
import { LanguageOption } from './consts';
24

35
export interface CodebytesChangeHandler {
@@ -12,4 +14,5 @@ export interface CodeByteEditorProps {
1214
snippetsBaseUrl?: string;
1315
onEdit?: CodebytesChangeHandler;
1416
onLanguageChange?: CodebytesChangeHandler;
17+
trackingData?: Omit<UserClickData, 'target'>;
1518
}

yarn.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15695,7 +15695,7 @@ react-remove-scroll@^2.4.1:
1569515695
use-callback-ref "^1.2.3"
1569615696
use-sidecar "^1.0.1"
1569715697

15698-
15698+
react-resize-observer@^1.1.1:
1569915699
version "1.1.1"
1570015700
resolved "https://registry.npmjs.org/react-resize-observer/-/react-resize-observer-1.1.1.tgz#641dfa2e0f4bd2549a8ab4bbbaf43b68f3dcaf76"
1570115701
integrity sha512-3R+90Hou90Mr3wJYc+unsySC8Pn91V4nmjO32NKvUvjphRUbq9HisyLg7bDyGBE7xlMrrM6Fax7iNQaFdc/FYA==

0 commit comments

Comments
 (0)