diff --git a/airbyte-webapp-e2e-tests/cypress/integration/onboarding.spec.ts b/airbyte-webapp-e2e-tests/cypress/integration/onboarding.spec.ts index 3e5d5446273f4..2ea56269f4434 100644 --- a/airbyte-webapp-e2e-tests/cypress/integration/onboarding.spec.ts +++ b/airbyte-webapp-e2e-tests/cypress/integration/onboarding.spec.ts @@ -6,7 +6,7 @@ describe("Preferences actions", () => { initialSetupCompleted(false); }); - it("Should redirect to onboarding after email is entered", () => { + it("Should redirect to connections page after email is entered", () => { cy.visit("/preferences"); cy.url().should("include", `/preferences`); @@ -15,6 +15,6 @@ describe("Preferences actions", () => { submitButtonClick(); - cy.url().should("match", /.*\/onboarding/); + cy.url().should("match", /.*\/connections/); }); }); diff --git a/airbyte-webapp-e2e-tests/cypress/integration/source.spec.ts b/airbyte-webapp-e2e-tests/cypress/integration/source.spec.ts index 6a00b9dd36bcd..07995c845d95b 100644 --- a/airbyte-webapp-e2e-tests/cypress/integration/source.spec.ts +++ b/airbyte-webapp-e2e-tests/cypress/integration/source.spec.ts @@ -46,7 +46,7 @@ describe("Unsaved changes modal", () => { openHomepage(); - cy.url().should("include", "/onboarding"); + cy.url().should("include", "/connections"); cy.get("[data-testid='confirmationModal']").should("not.exist"); }); @@ -57,7 +57,7 @@ describe("Unsaved changes modal", () => { openHomepage(); - cy.url().should("include", "/onboarding"); + cy.url().should("include", "/connections"); cy.get("[data-testid='confirmationModal']").should("not.exist"); }); diff --git a/airbyte-webapp/src/hooks/services/Analytics/pageTrackingCodes.tsx b/airbyte-webapp/src/hooks/services/Analytics/pageTrackingCodes.tsx index 117e51a573ba2..d2c9b5fc91c09 100644 --- a/airbyte-webapp/src/hooks/services/Analytics/pageTrackingCodes.tsx +++ b/airbyte-webapp/src/hooks/services/Analytics/pageTrackingCodes.tsx @@ -3,7 +3,6 @@ export enum PageTrackingCodes { LOGIN = "Auth.Login", RESET_PASSWORD = "Auth.ResetPassword", VERIFY_EMAIL = "Auth.VerifyEmail", - ONBOARDING = "Onboarding", SOURCE_NEW = "Source.New", SOURCE_LIST = "Source.List", SOURCE_ITEM = "Source.Item", diff --git a/airbyte-webapp/src/hooks/services/Experiment/experiments.ts b/airbyte-webapp/src/hooks/services/Experiment/experiments.ts index 332724050985a..afbc1d57e990a 100644 --- a/airbyte-webapp/src/hooks/services/Experiment/experiments.ts +++ b/airbyte-webapp/src/hooks/services/Experiment/experiments.ts @@ -5,7 +5,6 @@ */ export interface Experiments { - "onboarding.hideOnboarding": boolean; "connector.inviteUsersHint.visible": boolean; "connector.inviteUsersHint.linkToUsersPage": boolean; "connector.orderOverwrite": Record; diff --git a/airbyte-webapp/src/hooks/services/Onboarding/OnboardingService.tsx b/airbyte-webapp/src/hooks/services/Onboarding/OnboardingService.tsx deleted file mode 100644 index 61c05db639f6d..0000000000000 --- a/airbyte-webapp/src/hooks/services/Onboarding/OnboardingService.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React, { useContext, useMemo } from "react"; -import { useLocalStorage } from "react-use"; - -import casesConfig from "config/casesConfig.json"; -import { useCurrentWorkspace } from "hooks/services/useWorkspace"; - -interface Context { - visibleUseCases?: string[]; - useCaseLinks: Record; - skipCase: (skipId: string) => void; -} - -export const OnboardingServiceContext = React.createContext(null); - -export const OnboardingServiceProvider: React.FC> = ({ children }) => { - const workspace = useCurrentWorkspace(); - const [skippedUseCases, setSkippedUseCases] = useLocalStorage( - `${workspace.workspaceId}/skippedUseCases`, - [] - ); - - const ctx = useMemo( - () => ({ - visibleUseCases: Object.keys(casesConfig).filter((useCase) => !skippedUseCases?.includes(useCase)), - useCaseLinks: casesConfig, - skipCase: (skipId: string) => setSkippedUseCases([...(skippedUseCases ?? []), skipId]), - }), - [setSkippedUseCases, skippedUseCases] - ); - - return {children}; -}; - -export const useOnboardingService = (): Context => { - const onboardingService = useContext(OnboardingServiceContext); - if (!onboardingService) { - throw new Error("useOnboardingService must be used within a OnboardingServiceProvider."); - } - - return onboardingService; -}; diff --git a/airbyte-webapp/src/hooks/services/Onboarding/index.tsx b/airbyte-webapp/src/hooks/services/Onboarding/index.tsx deleted file mode 100644 index 305b4ce97d088..0000000000000 --- a/airbyte-webapp/src/hooks/services/Onboarding/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from "./OnboardingService"; diff --git a/airbyte-webapp/src/hooks/services/useWorkspace.tsx b/airbyte-webapp/src/hooks/services/useWorkspace.tsx index 742884dca98c3..f2776e8a07d81 100644 --- a/airbyte-webapp/src/hooks/services/useWorkspace.tsx +++ b/airbyte-webapp/src/hooks/services/useWorkspace.tsx @@ -28,22 +28,6 @@ const useWorkspace = () => { const analyticsService = useAnalyticsService(); - const finishOnboarding = async (skipStep?: string) => { - analyticsService.track(Namespace.ONBOARDING, Action.SKIP, { - actionDescription: "Skip Onboarding", - step: skipStep, - }); - - await updateWorkspace({ - workspaceId: workspace.workspaceId, - initialSetupComplete: workspace.initialSetupComplete, - anonymousDataCollection: !!workspace.anonymousDataCollection, - news: !!workspace.news, - securityUpdates: !!workspace.securityUpdates, - displaySetupWizard: false, - }); - }; - const setInitialSetupConfig = async (data: { email: string; anonymousDataCollection: boolean; @@ -114,7 +98,6 @@ const useWorkspace = () => { ); return { - finishOnboarding, setInitialSetupConfig, updatePreferences, updateWebhook, diff --git a/airbyte-webapp/src/locales/en.json b/airbyte-webapp/src/locales/en.json index 468fc9c1beaf0..0e69b4c0e418f 100644 --- a/airbyte-webapp/src/locales/en.json +++ b/airbyte-webapp/src/locales/en.json @@ -14,7 +14,6 @@ "sidebar.connections": "Connections", "sidebar.settings": "Settings", "sidebar.update": "Update", - "sidebar.onboarding": "Onboarding", "sidebar.resources": "Resources", "sidebar.documentation": "Documentation", "sidebar.joinSlack": "Join our Slack", @@ -202,9 +201,6 @@ "preferences.unsubscribeAnyTime": " You can unsubscribe any time.", "preferences.securityUpdates": "Receive emails about security updates.", - "onboarding.headTitle": "Get Started!", - "onboarding.title": "Let’s set up your first connection.", - "onboarding.subtitle": "Connections are automated data pipelines that sync data from a source to a destination.", "onboarding.createSource": "Create a source", "onboarding.sourceSetUp": "Set up the source", "onboarding.sourceSetUp.buttonText": "Set up source", @@ -212,38 +208,8 @@ "onboarding.destinationSetUp": "Set up the destination", "onboarding.destinationSetUp.buttonText": "Set up destination", "onboarding.setUpConnection": "Set up connection", - "onboarding.instructionsLink": "See full instructions how to connect {name}", "onboarding.fetchingSchema": "We are fetching the schema of your data source. \nThis should take less than a minute, but may take a few minutes on slow internet connections or data sources with a large amount of tables.", - "onboarding.tutorial": "Check how you can sync PostgreSQL databases in minutes", - "onboarding.skipOnboarding": "Skip Onboarding", - "onboarding.welcome": "Welcome to Airbyte!", - "onboarding.welcomeUser": "Welcome to Airbyte, {name}!", - "onboarding.welcomeUser.text": "Your path to syncing your data starts here.Connections are automated data pipelines that replicate data from a source to a destination. ", "onboarding.or": "or", - "onboarding.watchVideo": "Watch the 2-min demo video", - "onboarding.exploreDemo": "Explore our demo app with test data", - "onboarding.firstConnection": "Set up your first connection", - "onboarding.createFirstSource": "Create your first source", - "onboarding.createFirstSource.text": "Sources are connectors that pull data from a data source.", - "onboarding.createFirstDestination": "Create your first destination", - "onboarding.createFirstDestination.text": "Destinations are connectors that push data to a data store.", - "onboarding.createConnection": "Set up the connection", - "onboarding.createConnection.text": "Connections represent a sync between a source and a destination.", - "onboarding.synchronizationProgress": "{source}{destination} = Synchronization in progress", - "onboarding.useCases": "Enable popular use cases", - "onboarding.useCase.singleCustomerView": "Build a single customer view", - "onboarding.useCase.replicatePostgres": "Replicate your data between PostgreSQL databases", - "onboarding.useCase.syncMySQLKafka": "Sync MySQL CDC to Kafka using Change Data Capture", - "onboarding.useCase.mailchimpSnowflake": "Build a data ingestion pipeline from Mailchimp to Snowflake", - "onboarding.useCase.buildDashboard": "Build an activity dashboard for your engineering project", - "onboarding.skip": "Skip", - "onboarding.closeOnboarding": "Close onboarding", - "onboarding.syncCompleted": "Your first sync has been successfully completed!", - "onboarding.checkData": "Please check the data at the destination.\nDoes it fit with your expectations?", - "onboarding.skipFeedback": "Skip", - "onboarding.firstSync": "Start your first sync", - "onboarding.syncFailed": "Your sync is failed. Please try again", - "onboarding.startAgain": "Your sync was cancelled. You can start it again", "sources.description": "Sources are where you want to pull data from.", "sources.searchIncremental": "Search cursor value for incremental", diff --git a/airbyte-webapp/src/packages/cloud/cloudRoutes.tsx b/airbyte-webapp/src/packages/cloud/cloudRoutes.tsx index 737b8aa77333d..153c5581b08aa 100644 --- a/airbyte-webapp/src/packages/cloud/cloudRoutes.tsx +++ b/airbyte-webapp/src/packages/cloud/cloudRoutes.tsx @@ -6,12 +6,9 @@ import { ApiErrorBoundary } from "components/common/ApiErrorBoundary"; import LoadingPage from "components/LoadingPage"; import { useAnalyticsIdentifyUser, useAnalyticsRegisterValues } from "hooks/services/Analytics/useAnalyticsService"; -import { useExperiment } from "hooks/services/Experiment"; import { FeatureItem, FeatureSet, useFeatureService } from "hooks/services/Feature"; import { useApiHealthPoll } from "hooks/services/Health"; -import { OnboardingServiceProvider } from "hooks/services/Onboarding"; import { useQuery } from "hooks/useQuery"; -import { useExperimentSpeedyConnection } from "packages/cloud/components/experiments/SpeedyConnection/hooks/useExperimentSpeedyConnection"; import { useAuthService } from "packages/cloud/services/auth/AuthService"; import { Auth } from "packages/cloud/views/auth"; import { CreditsPage } from "packages/cloud/views/credits"; @@ -24,7 +21,6 @@ import CreateDestinationPage from "pages/destination/CreateDestinationPage"; import { DestinationItemPage } from "pages/destination/DestinationItemPage"; import { DestinationOverviewPage } from "pages/destination/DestinationOverviewPage"; import { DestinationSettingsPage } from "pages/destination/DestinationSettingsPage"; -import OnboardingPage from "pages/OnboardingPage"; import SourcesPage from "pages/SourcesPage"; import { useCurrentWorkspace, WorkspaceServiceProvider } from "services/workspaces/WorkspacesService"; import { setSegmentAnonymousId, useGetSegmentAnonymousId } from "utils/crossDomainUtils"; @@ -63,7 +59,6 @@ const MainRoutes: React.FC = () => { const { setWorkspaceFeatures } = useFeatureService(); const workspace = useCurrentWorkspace(); const cloudWorkspace = useGetCloudWorkspace(workspace.workspaceId); - const hideOnboardingExperiment = useExperiment("onboarding.hideOnboarding", false); useEffect(() => { const outOfCredits = @@ -86,11 +81,6 @@ const MainRoutes: React.FC = () => { ); useAnalyticsRegisterValues(analyticsContext); - const mainNavigate = - workspace.displaySetupWizard && !hideOnboardingExperiment ? RoutePaths.Onboarding : RoutePaths.Connections; - - // exp-speedy-connection - const { isExperimentVariant } = useExperimentSpeedyConnection(); return ( @@ -107,18 +97,7 @@ const MainRoutes: React.FC = () => { } /> } /> } /> - - {(workspace.displaySetupWizard || isExperimentVariant) && !hideOnboardingExperiment && ( - - - - } - /> - )} - } /> + } /> ); diff --git a/airbyte-webapp/src/packages/cloud/components/experiments/SpeedyConnection/SpeedyConnectionBanner/SpeedyConnectionBanner.tsx b/airbyte-webapp/src/packages/cloud/components/experiments/SpeedyConnection/SpeedyConnectionBanner/SpeedyConnectionBanner.tsx index 5dd9516c036c9..3e088fe85537f 100644 --- a/airbyte-webapp/src/packages/cloud/components/experiments/SpeedyConnection/SpeedyConnectionBanner/SpeedyConnectionBanner.tsx +++ b/airbyte-webapp/src/packages/cloud/components/experiments/SpeedyConnection/SpeedyConnectionBanner/SpeedyConnectionBanner.tsx @@ -5,7 +5,6 @@ import { Link } from "react-router-dom"; import { Text } from "components/ui/Text"; import { CountDownTimer } from "packages/cloud/components/experiments/SpeedyConnection/CountDownTimer"; -import { StepType } from "pages/OnboardingPage/types"; import { RoutePaths } from "pages/routePaths"; import { useExperimentSpeedyConnection } from "../hooks/useExperimentSpeedyConnection"; @@ -22,13 +21,7 @@ export const SpeedyConnectionBanner = () => { defaultMessage="Set up your first connection in the next and get 100 additonal credits for your trial" values={{ link: (link: React.ReactNode[]) => ( - + {link} ), diff --git a/airbyte-webapp/src/packages/cloud/views/layout/SideBar/SideBar.tsx b/airbyte-webapp/src/packages/cloud/views/layout/SideBar/SideBar.tsx index 620d18fe3e5da..3f7cd5ba3fa0b 100644 --- a/airbyte-webapp/src/packages/cloud/views/layout/SideBar/SideBar.tsx +++ b/airbyte-webapp/src/packages/cloud/views/layout/SideBar/SideBar.tsx @@ -13,7 +13,6 @@ import { DocsIcon } from "components/icons/DocsIcon"; import { DropdownMenu } from "components/ui/DropdownMenu"; import { Text } from "components/ui/Text"; -import { useExperiment } from "hooks/services/Experiment"; import { FeatureItem, IfFeatureEnabled } from "hooks/services/Feature"; import { useCurrentWorkspace } from "hooks/services/useWorkspace"; import { CloudRoutes } from "packages/cloud/cloudRoutes"; @@ -25,7 +24,6 @@ import { ReactComponent as AirbyteLogo } from "views/layout/SideBar/airbyteLogo. import ChatIcon from "views/layout/SideBar/components/ChatIcon"; import ConnectionsIcon from "views/layout/SideBar/components/ConnectionsIcon"; import DestinationIcon from "views/layout/SideBar/components/DestinationIcon"; -import OnboardingIcon from "views/layout/SideBar/components/OnboardingIcon"; import SettingsIcon from "views/layout/SideBar/components/SettingsIcon"; import SourceIcon from "views/layout/SideBar/components/SourceIcon"; import StatusIcon from "views/layout/SideBar/components/StatusIcon"; @@ -41,18 +39,12 @@ const SideBar: React.FC = () => { const cloudWorkspace = useGetCloudWorkspace(workspace.workspaceId); const { show } = useIntercom(); const { formatMessage } = useIntl(); - const hideOnboardingExperiment = useExperiment("onboarding.hideOnboarding", false); const handleChatUs = () => show(); return (