Skip to content

Commit d62bda4

Browse files
committed
feat: added utm params to button
1 parent 63b84a1 commit d62bda4

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

src/boot.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,20 @@ export default (element: HTMLDivElement, hub: Hub) => {
2525

2626
let settings: any = {
2727
id: element.id,
28-
height: parseInt(element.getAttribute("data-height") || "auto", 10)
28+
height: parseInt(element.getAttribute("data-height") || "auto", 10),
2929
};
3030

31+
const utmSource = element.getAttribute("data-utm-source") || undefined;
32+
const utmCampaign = element.getAttribute("data-utm-campaign") || undefined;
33+
3134
if (element.getAttribute("data-encoded")) {
3235
const exercise = JSON.parse(atob(decodeURIComponent(element.textContent)));
3336
settings.hint = exercise.hint;
3437
settings.language = exercise.language;
3538
settings.lang_version = exercise.lang_version;
3639
settings.pre_exercise_code =
37-
getPackages(exercise.packages, exercise.language) + exercise.pre_exercise_code;
40+
getPackages(exercise.packages, exercise.language) +
41+
exercise.pre_exercise_code;
3842
settings.sample_code = exercise.sample || exercise.sample_code;
3943
settings.sct = exercise.sct;
4044
settings.solution = exercise.solution;
@@ -72,13 +76,15 @@ export default (element: HTMLDivElement, hub: Hub) => {
7276
lang_version: element.getAttribute("data-lang-version"),
7377
packages: element.getAttribute("data-packages"),
7478
pre_exercise_code:
75-
getPackages(element.getAttribute("data-packages"), element.getAttribute("data-lang")) +
76-
getText("pre-exercise-code"),
79+
getPackages(
80+
element.getAttribute("data-packages"),
81+
element.getAttribute("data-lang")
82+
) + getText("pre-exercise-code"),
7783
sample_code: getText("sample-code"),
7884
sct: getText("sct"),
7985
solution: getText("solution"),
8086
showRunButton: showRunButton,
81-
noLazyLoad: noLazyLoad
87+
noLazyLoad: noLazyLoad,
8288
});
8389
}
8490

@@ -102,7 +108,12 @@ export default (element: HTMLDivElement, hub: Hub) => {
102108
return (
103109
<AppContainer>
104110
<Provider store={store}>
105-
<App height={settings.height} language={settings.language} />
111+
<App
112+
height={settings.height}
113+
language={settings.language}
114+
utmSource={utmSource}
115+
utmCampaign={utmCampaign}
116+
/>
106117
</Provider>
107118
</AppContainer>
108119
);

src/components/App/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ export interface IAppProps extends React.Props<App> {
8383
language?: string;
8484
height?: number;
8585
nPlots?: number;
86+
utmSource?: string;
87+
utmCampaign?: string;
8688
}
8789

8890
interface IAppState {
@@ -317,6 +319,8 @@ export class App extends React.Component<IAppProps, IAppState> {
317319
<Footer
318320
onShowSolution={this.showSolutionTab}
319321
showSolutionButton={this.state.solutionButtonVisible}
322+
utmSource={this.props.utmSource}
323+
utmCampaign={this.props.utmCampaign}
320324
/>
321325
</div>
322326
</Provider>

src/components/Footer.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export interface IFooterProps extends React.Props<Footer> {
2222
showRunButton?: boolean;
2323
sct?: string;
2424
language?: string;
25+
utmSource?: string;
26+
utmCampaign?: string;
2527
}
2628

2729
interface IFooterState {
@@ -37,6 +39,8 @@ export class Footer extends React.PureComponent<IFooterProps, IFooterState> {
3739
isSessionBusy: false,
3840
showSolutionButton: false,
3941
showRunButton: false,
42+
utmSource: "datacamp_light",
43+
utmCampaign: "powered_by_datacamp",
4044
};
4145

4246
public displayName: string = "Footer";
@@ -72,6 +76,11 @@ export class Footer extends React.PureComponent<IFooterProps, IFooterState> {
7276
}
7377

7478
public render() {
79+
const { utmSource, utmCampaign } = this.props;
80+
const baseUrl = "https://www.datacamp.com/";
81+
const queryParams = `utm_source=${utmSource}&utm_campaign=${utmCampaign}`;
82+
const datacampUrl = `${baseUrl}?${queryParams}`;
83+
7584
return (
7685
<div className={styles.footer}>
7786
{this.props.hint ? (
@@ -118,7 +127,7 @@ export class Footer extends React.PureComponent<IFooterProps, IFooterState> {
118127
className={styles.restart}
119128
/>
120129
<a
121-
href="https://www.datacamp.com/?utm_source=datacamp_light&utm_campaign=powered_by_datacamp"
130+
href={datacampUrl}
122131
className={styles.logo}
123132
title="Powered by DataCamp"
124133
target="_blank"

0 commit comments

Comments
 (0)