Skip to content
Snippets Groups Projects
Unverified Commit 777667ca authored by Alexander Polyankin's avatar Alexander Polyankin Committed by GitHub
Browse files

Fix activation snowplow events on FE (#19986)

parent 3e73e5d7
Branches
Tags
No related merge requests found
......@@ -17,7 +17,7 @@ export const createTracker = store => {
};
export const trackPageView = url => {
if (!url) {
if (!url || !Settings.trackingEnabled()) {
return;
}
......@@ -31,7 +31,7 @@ export const trackPageView = url => {
};
export const trackStructEvent = (category, action, label, value) => {
if (!category || !label) {
if (!category || !label || !Settings.trackingEnabled()) {
return;
}
......@@ -41,7 +41,7 @@ export const trackStructEvent = (category, action, label, value) => {
};
export const trackSchemaEvent = (schema, version, data) => {
if (!schema) {
if (!schema || !Settings.trackingEnabled()) {
return;
}
......
......@@ -63,7 +63,7 @@ import {
getQueryResults,
isBasedOnExistingQuestion,
} from "./selectors";
import { trackNewQuestionSaved } from "./tracking";
import { trackNewQuestionSaved } from "./analytics";
import { MetabaseApi, CardApi, UserApi, DashboardApi } from "metabase/services";
......
......@@ -2,11 +2,10 @@
import { createSelector } from "reselect";
import _ from "underscore";
import { getIn, assocIn, updateIn, merge } from "icepick";
import { assocIn, getIn, merge, updateIn } from "icepick";
// Needed due to wrong dependency resolution order
// eslint-disable-next-line no-unused-vars
import Visualization from "metabase/visualizations/components/Visualization";
import {
extractRemappings,
......@@ -21,7 +20,6 @@ import Utils from "metabase/lib/utils";
import Question from "metabase-lib/lib/Question";
import NativeQuery from "metabase-lib/lib/queries/NativeQuery";
import { isAdHocModelQuestion } from "metabase/lib/data-modeling/utils";
import { isVirtualCardId } from "metabase/lib/saved-questions";
import Databases from "metabase/entities/databases";
......@@ -570,20 +568,9 @@ export const getQuestionDetailsTimelineDrawerState = createSelector(
uiControls => uiControls && uiControls.questionDetailsTimelineDrawerState,
);
export const getSourceTable = createSelector([getQuestion], question => {
const query = question.isStructured()
? question.query().rootQuery()
: question.query();
return query.table();
});
export const isBasedOnExistingQuestion = createSelector(
[getSourceTable, getOriginalQuestion],
(sourceTable, originalQuestion) => {
if (sourceTable != null) {
return isVirtualCardId(sourceTable.id);
} else {
return originalQuestion != null;
}
[getOriginalQuestion],
originalQuestion => {
return originalQuestion != null;
},
);
import React, { useEffect } from "react";
import React from "react";
import { t } from "ttag";
import _ from "underscore";
import { updateIn } from "icepick";
......@@ -48,10 +48,6 @@ const DatabaseStep = ({
onInviteSubmit,
onStepCancel,
}: DatabaseStepProps): JSX.Element => {
useEffect(() => {
engine && onEngineChange(engine);
}, [engine, onEngineChange]);
const handleCancel = () => {
onStepCancel(engine);
};
......@@ -81,6 +77,7 @@ const DatabaseStep = ({
database={database}
engine={engine}
onSubmit={onDatabaseSubmit}
onEngineChange={onEngineChange}
/>
<StepActions>
<StepLink onClick={handleCancel}>{t`I'll add my data later`}</StepLink>
......@@ -101,12 +98,14 @@ interface DatabaseFormProps {
database?: DatabaseInfo;
engine?: string;
onSubmit: (database: DatabaseInfo) => void;
onEngineChange: (engine: string) => void;
}
const DatabaseForm = ({
database,
engine,
onSubmit,
onEngineChange,
}: DatabaseFormProps): JSX.Element => {
const handleSubmit = async (database: DatabaseInfo) => {
try {
......@@ -116,6 +115,10 @@ const DatabaseForm = ({
}
};
const handleEngineChange = (value?: string) => {
value && onEngineChange(value);
};
return (
<Databases.Form
form={Databases.forms.setup}
......@@ -132,7 +135,7 @@ const DatabaseForm = ({
onChangeField,
}: FormProps) => (
<Form>
<FormField name="engine" />
<FormField name="engine" onChange={handleEngineChange} />
<DriverWarning
engine={values.engine}
hasBorder={true}
......
......@@ -19,6 +19,7 @@ export interface FormValues {
export interface FormFieldProps {
name: string;
onChange?: (value?: string) => void;
}
export interface FormFooterProps {
......
import { connect } from "react-redux";
import Settings from "metabase/lib/settings";
import { State } from "metabase-types/store";
import PreferencesStep from "../../components/PreferencesStep";
import { setTracking, submitSetup, setStep } from "../../actions";
......@@ -26,6 +27,8 @@ const mapDispatchToProps = (dispatch: any) => ({
onTrackingChange: (isTrackingAllowed: boolean) => {
dispatch(setTracking(isTrackingAllowed));
trackTrackingChanged(isTrackingAllowed);
Settings.set("anon-tracking-enabled", isTrackingAllowed);
trackTrackingChanged(isTrackingAllowed);
},
onStepSelect: () => {
dispatch(setStep(PREFERENCES_STEP));
......
......@@ -194,29 +194,28 @@ describeWithSnowplow("scenarios > setup", () => {
});
it("should send snowplow events", () => {
// 1 - pageview
// 1 - new_instance_created
// 2 - pageview
cy.visit(`/setup`);
// 2 - setup/step_seen
// 3 - setup/step_seen
cy.findByText("Welcome to Metabase");
cy.findByTextEnsureVisible("Let's get started").click();
cy.button("Let's get started").click();
// 3 - setup/step_seen
// 4 - setup/step_seen
cy.findByText("What's your preferred language?");
// One backend event should be recorded (on new instance initialization)
expectGoodSnowplowEvents(4);
});
it("should ignore snowplow failures and work as normal", () => {
// 1 - new_instance_created
blockSnowplow();
cy.visit(`/setup`);
cy.findByText("Welcome to Metabase");
cy.findByTextEnsureVisible("Let's get started").click();
cy.findByText("What's your preferred language?");
cy.button("Let's get started").click();
// One backend event should be recorded (on new instance initialization)
expectGoodSnowplowEvents(1);
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment