diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--dark.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--dark.png index 10651d17b803f..1313a6caabdbf 100644 Binary files a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--dark.png and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--dark.png differ diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--light.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--light.png index 4cde8e1c187aa..2e10dc60123a6 100644 Binary files a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--light.png and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-activation--light.png differ diff --git a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx index 46164e0270db1..26cc640b24474 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx @@ -11,9 +11,9 @@ import { NotebookPanel } from 'scenes/notebooks/NotebookPanel/NotebookPanel' import { SidePanelTab } from '~/types' +import { SidePanelActivation, SidePanelActivationIcon } from './panels/activation/SidePanelActivation' import { SidePanelActivity, SidePanelActivityIcon } from './panels/activity/SidePanelActivity' import { SidePanelDiscussion, SidePanelDiscussionIcon } from './panels/discussion/SidePanelDiscussion' -import { SidePanelActivation, SidePanelActivationIcon } from './panels/SidePanelActivation' import { SidePanelDocs } from './panels/SidePanelDocs' import { SidePanelFeaturePreviews } from './panels/SidePanelFeaturePreviews' import { SidePanelSettings } from './panels/SidePanelSettings' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelActivation.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelActivation.tsx deleted file mode 100644 index f67c4ef6274ca..0000000000000 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelActivation.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { useValues } from 'kea' -import { activationLogic, ActivationTaskType } from 'lib/components/ActivationSidebar/activationLogic' -import { ActivationTask } from 'lib/components/ActivationSidebar/ActivationSidebar' -import { ProfessorHog } from 'lib/components/hedgehogs' -import { LemonIconProps } from 'lib/lemon-ui/icons' -import { LemonProgressCircle } from 'lib/lemon-ui/LemonProgressCircle' - -export const SidePanelActivation = (): JSX.Element => { - const { activeTasks, completionPercent, completedTasks } = useValues(activationLogic) - - return ( -
-

Quick Start

-

Use our Quick Start guide to learn about everything PostHog can do for you and your product.

-
-
- - {activeTasks.length} - -

still to go

-
-
- -
-
- {activeTasks.length > 0 && ( -
-

What's next?

- -
- )} - {completedTasks.length > 0 && ( -
-

Completed

- -
- )} -
- ) -} - -export const SidePanelActivationIcon = ({ className }: { className: LemonIconProps['className'] }): JSX.Element => { - const { activeTasks, completionPercent } = useValues(activationLogic) - - return ( - - {activeTasks.length} - - ) -} diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx new file mode 100644 index 0000000000000..98a26ec2bfb91 --- /dev/null +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx @@ -0,0 +1,123 @@ +import { LemonButton, LemonButtonWithSideActionProps } from '@posthog/lemon-ui' +import { useActions, useValues } from 'kea' +import { ProfessorHog } from 'lib/components/hedgehogs' +import { IconCheckmark, IconClose, LemonIconProps } from 'lib/lemon-ui/icons' +import { LemonProgressCircle } from 'lib/lemon-ui/LemonProgressCircle' +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' + +import { + activationLogic, + ActivationTaskType, +} from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' + +import { SidePanelPaneHeader } from '../../components/SidePanelPaneHeader' + +export const SidePanelActivation = (): JSX.Element => { + const { activeTasks, completionPercent, completedTasks } = useValues(activationLogic) + + return ( + <> + +
+

Use our Quick Start guide to learn about everything PostHog can do for you and your product.

+
+
+ + {activeTasks.length} + +

still to go

+
+
+ +
+
+ {activeTasks.length > 0 && ( +
+

What's next?

+
    + {activeTasks.map((task: ActivationTaskType) => ( + + ))} +
+
+ )} + {completedTasks.length > 0 && ( +
+

Completed

+
    + {completedTasks.map((task: ActivationTaskType) => ( + + ))} +
+
+ )} +
+ + ) +} + +export const SidePanelActivationIcon = ({ className }: { className: LemonIconProps['className'] }): JSX.Element => { + const { activeTasks, completionPercent } = useValues(activationLogic) + + return ( + + {activeTasks.length} + + ) +} + +const ActivationTask = ({ + id, + name, + description, + completed, + canSkip, + skipped, + url, +}: ActivationTaskType): JSX.Element => { + const displaySideAction = !completed && !skipped && canSkip + const { runTask, skipTask } = useActions(activationLogic) + const { reportActivationSideBarTaskClicked } = useActions(eventUsageLogic) + + const content = ( +
+

{name}

+ {!completed && !skipped &&

{description}

} +
+ ) + + const params: Partial = { + id, + fullWidth: true, + type: 'secondary', + icon: completed ? : skipped ? : null, + tooltip: name, + } + if (url) { + params.to = url + params.targetBlank = true + } else { + params.onClick = () => { + runTask(id) + reportActivationSideBarTaskClicked(id) + } + } + return ( +
  • + {displaySideAction ? ( + , + tooltip: 'Skip task', + onClick: () => skipTask(id), + }} + > + {content} + + ) : ( + {content} + )} +
  • + ) +} diff --git a/frontend/src/lib/components/ActivationSidebar/activationLogic.test.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts similarity index 100% rename from frontend/src/lib/components/ActivationSidebar/activationLogic.test.ts rename to frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts diff --git a/frontend/src/lib/components/ActivationSidebar/activationLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts similarity index 97% rename from frontend/src/lib/components/ActivationSidebar/activationLogic.ts rename to frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts index 5fe22dc5541be..2162dd5045550 100644 --- a/frontend/src/lib/components/ActivationSidebar/activationLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts @@ -1,6 +1,6 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' -import { router, urlToAction } from 'kea-router' +import { router } from 'kea-router' import api from 'lib/api' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { permanentlyMount } from 'lib/utils/kea-logic-builders' @@ -13,7 +13,7 @@ import { urls } from 'scenes/urls' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { dashboardsModel } from '~/models/dashboardsModel' -import { EventDefinitionType, ProductKey, SidePanelTab, TeamBasicType } from '~/types' +import { EventDefinitionType, ProductKey, TeamBasicType } from '~/types' import type { activationLogicType } from './activationLogicType' @@ -362,12 +362,5 @@ export const activationLogic = kea([ actions.loadInsights() }, })), - urlToAction(({ actions, values }) => ({ - '*': (_, params) => { - if (params?.onboarding_completed && !values.hasCompletedAllTasks) { - actions.openSidePanel(SidePanelTab.Activation) - } - }, - })), permanentlyMount(), ]) diff --git a/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx index e889d5783cf0d..0ccfca7c05f47 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx @@ -1,9 +1,9 @@ import { connect, kea, path, selectors } from 'kea' -import { activationLogic } from 'lib/components/ActivationSidebar/activationLogic' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { SidePanelTab } from '~/types' import { sidePanelActivityLogic } from './panels/activity/sidePanelActivityLogic' diff --git a/frontend/src/lib/components/ActivationSidebar/ActivationSidebar.tsx b/frontend/src/lib/components/ActivationSidebar/ActivationSidebar.tsx deleted file mode 100644 index a0bce14a81e69..0000000000000 --- a/frontend/src/lib/components/ActivationSidebar/ActivationSidebar.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { LemonButton, LemonButtonWithSideActionProps } from '@posthog/lemon-ui' -import { useActions } from 'kea' -import { IconCheckmark, IconClose } from 'lib/lemon-ui/icons' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' - -import { activationLogic, ActivationTaskType } from './activationLogic' - -export const ActivationTask = ({ - id, - name, - description, - completed, - canSkip, - skipped, - url, -}: ActivationTaskType): JSX.Element => { - const displaySideAction = !completed && !skipped && canSkip - const { runTask, skipTask } = useActions(activationLogic) - const { reportActivationSideBarTaskClicked } = useActions(eventUsageLogic) - - const content = ( -
    -

    {name}

    - {!completed && !skipped &&

    {description}

    } -
    - ) - - const params: Partial = { - id, - fullWidth: true, - type: 'secondary', - icon: completed ? : skipped ? : null, - tooltip: name, - } - if (url) { - params.to = url - params.targetBlank = true - } else { - params.onClick = () => { - runTask(id) - reportActivationSideBarTaskClicked(id) - } - } - return ( -
  • - {displaySideAction ? ( - , - tooltip: 'Skip task', - onClick: () => skipTask(id), - }} - > - {content} - - ) : ( - {content} - )} -
  • - ) -} diff --git a/frontend/src/scenes/onboarding/onboardingLogic.tsx b/frontend/src/scenes/onboarding/onboardingLogic.tsx index d714491a5fc48..942fe3ced24c4 100644 --- a/frontend/src/scenes/onboarding/onboardingLogic.tsx +++ b/frontend/src/scenes/onboarding/onboardingLogic.tsx @@ -34,8 +34,8 @@ export const getProductUri = (productKey: ProductKey, featureFlags?: FeatureFlag switch (productKey) { case ProductKey.PRODUCT_ANALYTICS: return featureFlags && featureFlags[FEATURE_FLAGS.REDIRECT_WEB_PRODUCT_ANALYTICS_ONBOARDING] === 'test' - ? combineUrl(urls.webAnalytics(), { onboarding_completed: true }).url - : combineUrl(urls.insights(), { onboarding_completed: true }).url + ? combineUrl(urls.webAnalytics(), {}, { panel: 'activation' }).url + : combineUrl(urls.insights(), {}, { panel: 'activation' }).url case ProductKey.SESSION_REPLAY: return urls.replay() case ProductKey.FEATURE_FLAGS: