Skip to content

Commit

Permalink
🪟 🧹 Move AnalyticsService into core/services (#6292)
Browse files Browse the repository at this point in the history
  • Loading branch information
timroes committed May 3, 2023
1 parent 3cf97ee commit 7180303
Show file tree
Hide file tree
Showing 84 changed files with 137 additions and 138 deletions.
4 changes: 2 additions & 2 deletions airbyte-webapp/.storybook/withProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import { FeatureService } from "../src/hooks/services/Feature";
import { ConfigServiceProvider, config } from "../src/config";
import { DocumentationPanelProvider } from "../src/views/Connector/ConnectorDocumentationLayout/DocumentationPanelContext";
import { ServicesProvider } from "../src/core/servicesProvider";
import { analyticsServiceContext } from "../src/hooks/services/Analytics";
import { analyticsServiceContext } from "../src/core/services/analytics";
import { AppMonitoringServiceProvider } from "../src/hooks/services/AppMonitoringService";
import type { AnalyticsService } from "../src/core/analytics";
import type { AnalyticsService } from "../src/core/services/analytics";

const analyticsContextMock: AnalyticsService = {
track: () => {},
Expand Down
2 changes: 1 addition & 1 deletion airbyte-webapp/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import { ApiErrorBoundary } from "components/common/ApiErrorBoundary";
import { config } from "config";
import { QueryProvider } from "core/api";
import { I18nProvider } from "core/i18n";
import { AnalyticsProvider } from "core/services/analytics";
import { ServicesProvider } from "core/servicesProvider";
import { AppMonitoringServiceProvider } from "hooks/services/AppMonitoringService";
import { ConfirmationModalService } from "hooks/services/ConfirmationModal";
import { defaultOssFeatures, FeatureService } from "hooks/services/Feature";
import { FormChangeTrackerService } from "hooks/services/FormChangeTracker";
import { ModalServiceProvider } from "hooks/services/Modal";
import { NotificationService } from "hooks/services/Notification";
import { AnalyticsProvider } from "views/common/AnalyticsProvider";

import LoadingPage from "./components/LoadingPage";
import { ConfigServiceProvider } from "./config";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import { SortableTableHeader } from "components/ui/Table";
import { Text } from "components/ui/Text";
import { Tooltip } from "components/ui/Tooltip";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConfirmationModalService } from "hooks/services/ConfirmationModal";
import { useNotificationService } from "hooks/services/Notification";
import { getEditPath } from "pages/connectorBuilder/ConnectorBuilderRoutes";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import { Input } from "components/ui/Input";
import { ExternalLink } from "components/ui/Link";
import { Text } from "components/ui/Text";

import { Action, Namespace } from "core/analytics";
import { ConnectionScheduleData, ConnectionScheduleType } from "core/request/AirbyteClient";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConnectionFormService } from "hooks/services/ConnectionForm/ConnectionFormService";
import { links } from "utils/links";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import { useAsyncFn } from "react-use";

import { Switch } from "components/ui/Switch";

import { Action, Namespace } from "core/analytics";
import { getFrequencyFromScheduleData } from "core/analytics/utils";
import { ConnectionStatus } from "core/request/AirbyteClient";
import { useAnalyticsService } from "hooks/services/Analytics";
import { getFrequencyFromScheduleData } from "core/services/analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConnectionEditService } from "hooks/services/ConnectionEdit/ConnectionEditService";

import styles from "./EnabledControl.module.scss";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import * as yup from "yup";
import { Button } from "components/ui/Button";
import { Modal, ModalBody, ModalFooter } from "components/ui/Modal";

import { Action, Namespace } from "core/analytics";
import { FormikPatch } from "core/form/FormikPatch";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConnectorBuilderFormState } from "services/connectorBuilder/ConnectorBuilderStateService";

import styles from "./AddStreamButton.module.scss";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ControlLabels } from "components/LabeledControl";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { links } from "utils/links";

import { BuilderCard } from "./BuilderCard";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import { FlexContainer } from "components/ui/Flex";
import { Heading } from "components/ui/Heading";
import { Text } from "components/ui/Text";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { BuilderView, useConnectorBuilderFormState } from "services/connectorBuilder/ConnectorBuilderStateService";

import { AddStreamButton } from "./AddStreamButton";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useIntl } from "react-intl";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";

import { AuthenticationSection } from "./AuthenticationSection";
import { BuilderCard } from "./BuilderCard";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import { Button } from "components/ui/Button";
import { Message } from "components/ui/Message";
import { Modal, ModalBody, ModalFooter } from "components/ui/Modal";

import { Action, Namespace } from "core/analytics";
import { FormikPatch } from "core/form/FormikPatch";
import { AirbyteJSONSchema } from "core/jsonSchema/types";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { ConnectorBuilderMainFormikContext } from "services/connectorBuilder/ConnectorBuilderStateService";

import { BuilderField } from "./BuilderField";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import { Button } from "components/ui/Button";
import { CodeEditor } from "components/ui/CodeEditor";
import { Text } from "components/ui/Text";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConfirmationModalService } from "hooks/services/ConfirmationModal";
import {
BuilderView,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { FormattedMessage } from "react-intl";

import { Text } from "components/ui/Text";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";

import styles from "./UiYamlToggleButton.module.scss";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import { FormattedMessage } from "react-intl";
import { Button } from "components/ui/Button";
import { Tooltip } from "components/ui/Tooltip";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConnectorBuilderFormState } from "services/connectorBuilder/ConnectorBuilderStateService";
import { downloadFile } from "utils/file";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import { FlexContainer, FlexItem } from "components/ui/Flex";
import { Modal, ModalBody, ModalFooter } from "components/ui/Modal";
import { Spinner } from "components/ui/Spinner";

import { Action, Namespace } from "core/analytics";
import { DeclarativeComponentSchema } from "core/request/ConnectorManifest";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useNotificationService } from "hooks/services/Notification";
import {
useListVersions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import { FlexContainer, FlexItem } from "components/ui/Flex";
import { Message } from "components/ui/Message";
import { Tooltip } from "components/ui/Tooltip";

import { Action, Namespace } from "core/analytics";
import { StreamReadInferredSchema } from "core/request/ConnectorBuilderClient";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import {
useConnectorBuilderFormState,
useConnectorBuilderTestState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import { useIntl } from "react-intl";
import { Heading } from "components/ui/Heading";
import { ListBox, ListBoxControlButtonProps } from "components/ui/ListBox";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import {
useConnectorBuilderTestState,
useConnectorBuilderFormState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import { ResizablePanels } from "components/ui/ResizablePanels";
import { Spinner } from "components/ui/Spinner";
import { Text } from "components/ui/Text";

import { Action, Namespace } from "core/analytics";
import { StreamsListReadStreamsItem } from "core/request/ConnectorBuilderClient";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConnectorBuilderTestState } from "services/connectorBuilder/ConnectorBuilderStateService";
import { links } from "utils/links";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import { useEffect, useMemo, useRef, useState } from "react";
import { CodeEditor } from "components/ui/CodeEditor";
import { FlexContainer, FlexItem } from "components/ui/Flex";

import { Action, Namespace } from "core/analytics";
import { ConnectorManifest } from "core/request/ConnectorManifest";
import { useAnalyticsService } from "hooks/services/Analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useConfirmationModalService } from "hooks/services/ConfirmationModal";
import { useConnectorBuilderFormState } from "services/connectorBuilder/ConnectorBuilderStateService";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { SelectConnector } from "./SelectConnector";

const mockTrackSelectConnector = jest.fn();

jest.mock("core/analytics/useTrackSelectConnector", () => ({
jest.mock("./useTrackSelectConnector", () => ({
useTrackSelectConnector: () => mockTrackSelectConnector,
}));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { FormattedMessage, useIntl } from "react-intl";

import { Heading } from "components/ui/Heading";

import { useTrackSelectConnector } from "core/analytics/useTrackSelectConnector";
import { ConnectorDefinition } from "core/domain/connector";
import { isSourceDefinition } from "core/domain/connector/source";
import { useModalService } from "hooks/services/Modal";
Expand All @@ -12,6 +11,7 @@ import RequestConnectorModal from "views/Connector/RequestConnectorModal";

import { ConnectorGrid } from "./ConnectorGrid";
import styles from "./SelectConnector.module.scss";
import { useTrackSelectConnector } from "./useTrackSelectConnector";

interface SelectConnectorProps {
connectorType: "source" | "destination";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import capitalize from "lodash/capitalize";
import { useCallback } from "react";

import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics";
import { useAnalyticsService, Action, Namespace } from "core/services/analytics";

export const useTrackSelectConnector = (connectorType: "source" | "destination") => {
const analytics = useAnalyticsService();
Expand Down
2 changes: 0 additions & 2 deletions airbyte-webapp/src/core/analytics/index.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
/// <reference types="@types/segment-analytics" />

import { useEffect } from "react";
import React from "react";
import { useEffectOnce } from "react-use";

// if token is undefined calls to segment will be a no-op.
const useSegment = (token?: string): void => {
useEffect(() => {
if (token) {
import { config } from "config";
import AnalyticsServiceProvider from "core/services/analytics/useAnalyticsService";

export const AnalyticsProvider: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
useEffectOnce(() => {
if (config.segment.enabled && config.segment.token) {
const script = document.createElement("script");
script.innerText = `
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://seg.airbyte.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="${token}";analytics._cdn="https://seg.airbyte.com";analytics.SNIPPET_VERSION="4.15.3";
analytics.load("${token}");
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://seg.airbyte.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="${config.segment.token}";analytics._cdn="https://seg.airbyte.com";analytics.SNIPPET_VERSION="4.15.3";
analytics.load("${config.segment.token}");
analytics.page();
}}();
`;
Expand All @@ -19,7 +22,7 @@ const useSegment = (token?: string): void => {
document.body.appendChild(script);
}
}
}, [token]);
};
});

export default useSegment;
return <AnalyticsServiceProvider>{children}</AnalyticsServiceProvider>;
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { AnalyticsService } from "core/analytics/AnalyticsService";
import type { AnalyticsService } from "../AnalyticsService";

export const useAnalyticsService = (): AnalyticsService => {
return {
Expand Down
12 changes: 12 additions & 0 deletions airbyte-webapp/src/core/services/analytics/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export { AnalyticsProvider } from "./AnalyticsProvider";
export { AnalyticsService } from "./AnalyticsService";
export { Namespace, Action } from "./types";
export { getFrequencyFromScheduleData } from "./utils";
export {
useAnalyticsService,
useAnalyticsIdentifyUser,
useTrackPage,
useAnalyticsRegisterValues,
analyticsServiceContext,
} from "./useAnalyticsService";
export * from "./pageTrackingCodes";
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import React, { useContext, useEffect, useRef } from "react";

import { useConfig } from "config";
import { AnalyticsService } from "core/analytics/AnalyticsService";

import { AnalyticsService } from "./AnalyticsService";

type AnalyticsContext = Record<string, unknown>;

Expand Down
File renamed without changes.
2 changes: 0 additions & 2 deletions airbyte-webapp/src/hooks/services/Analytics/index.tsx

This file was deleted.

6 changes: 3 additions & 3 deletions airbyte-webapp/src/hooks/services/useConnectionHook.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { useCallback } from "react";
import { useIntl } from "react-intl";
import { useMutation, useQueryClient } from "react-query";

import { Action, Namespace } from "core/analytics";
import { getFrequencyFromScheduleData } from "core/analytics/utils";
import { SyncSchema } from "core/domain/catalog";
import { WebBackendConnectionService } from "core/domain/connection";
import { ConnectionService } from "core/domain/connection/ConnectionService";
import { getFrequencyFromScheduleData } from "core/services/analytics";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useInitService } from "services/useInitService";
import { useCurrentWorkspaceId, useInvalidateWorkspaceStateQuery } from "services/workspaces/WorkspacesService";

import { useAnalyticsService } from "./Analytics";
import { useAppMonitoringService } from "./AppMonitoringService";
import { useNotificationService } from "./Notification";
import { useCurrentWorkspace } from "./useWorkspace";
Expand Down
4 changes: 2 additions & 2 deletions airbyte-webapp/src/hooks/services/useDestinationHook.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { useCallback } from "react";
import { useMutation, useQueryClient } from "react-query";

import { Action, Namespace } from "core/analytics";
import { ConnectionConfiguration } from "core/domain/connection";
import { DestinationService } from "core/domain/connector/DestinationService";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useInitService } from "services/useInitService";
import { isDefined } from "utils/common";

import { useAnalyticsService } from "./Analytics";
import { useRemoveConnectionsFromList } from "./useConnectionHook";
import { useRequestErrorHandler } from "./useRequestErrorHandler";
import { useCurrentWorkspace } from "./useWorkspace";
Expand Down
4 changes: 2 additions & 2 deletions airbyte-webapp/src/hooks/services/useRequestConnector.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Action, Namespace } from "core/analytics";
import { useAnalyticsService } from "hooks/services/Analytics/useAnalyticsService";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics/useAnalyticsService";

interface Values {
connectorType: string;
Expand Down
4 changes: 2 additions & 2 deletions airbyte-webapp/src/hooks/services/useSourceHook.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import { useCallback, useEffect, useState } from "react";
import { useMutation, useQueryClient } from "react-query";

import { useConfig } from "config";
import { Action, Namespace } from "core/analytics";
import { SyncSchema } from "core/domain/catalog";
import { ConnectionConfiguration } from "core/domain/connection";
import { SourceService } from "core/domain/connector/SourceService";
import { Action, Namespace } from "core/services/analytics";
import { useAnalyticsService } from "core/services/analytics";
import { useInitService } from "services/useInitService";
import { isDefined } from "utils/common";

import { useAnalyticsService } from "./Analytics";
import { useRemoveConnectionsFromList } from "./useConnectionHook";
import { useRequestErrorHandler } from "./useRequestErrorHandler";
import { useCurrentWorkspace } from "./useWorkspace";
Expand Down
Loading

0 comments on commit 7180303

Please sign in to comment.