diff --git a/frontend/__snapshots__/scenes-other-settings--settings-project--dark.png b/frontend/__snapshots__/scenes-other-settings--settings-project--dark.png index 3c3f37e66ec31..7e50137a13381 100644 Binary files a/frontend/__snapshots__/scenes-other-settings--settings-project--dark.png and b/frontend/__snapshots__/scenes-other-settings--settings-project--dark.png differ diff --git a/frontend/__snapshots__/scenes-other-settings--settings-project--light.png b/frontend/__snapshots__/scenes-other-settings--settings-project--light.png index 015b360886f5b..fca36f690b5b4 100644 Binary files a/frontend/__snapshots__/scenes-other-settings--settings-project--light.png and b/frontend/__snapshots__/scenes-other-settings--settings-project--light.png differ diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx index a4d98d004ec8a..1868dc2132871 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx @@ -14,9 +14,10 @@ import { import { LemonButton, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { SupportForm } from 'lib/components/Support/SupportForm' -import { supportLogic } from 'lib/components/Support/supportLogic' +import { getPublicSupportSnippet, supportLogic } from 'lib/components/Support/supportLogic' import React from 'react' import { billingLogic } from 'scenes/billing/billingLogic' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -145,6 +146,9 @@ export const SidePanelSupport = (): JSX.Element => { const { hasAvailableFeature } = useValues(userLogic) const { openEmailForm, closeEmailForm } = useActions(supportLogic) const { isEmailFormOpen } = useValues(supportLogic) + const { preflight } = useValues(preflightLogic) + const { user } = useValues(userLogic) + const region = preflight?.region const theLogic = supportLogic({ onClose: () => closeSidePanel(SidePanelTab.Support) }) const { title } = useValues(theLogic) @@ -231,7 +235,9 @@ export const SidePanelSupport = (): JSX.Element => { } targetBlank > @@ -264,7 +270,9 @@ export const SidePanelSupport = (): JSX.Element => { } targetBlank > diff --git a/frontend/src/lib/components/Support/supportLogic.ts b/frontend/src/lib/components/Support/supportLogic.ts index 3201e31fc5289..3388cd3af5e3c 100644 --- a/frontend/src/lib/components/Support/supportLogic.ts +++ b/frontend/src/lib/components/Support/supportLogic.ts @@ -16,6 +16,20 @@ import { Region, SidePanelTab, TeamType, UserType } from '~/types' import type { supportLogicType } from './supportLogicType' import { openSupportModal } from './SupportModal' +export function getPublicSupportSnippet(region: Region | null | undefined, user: UserType | null): string { + if (!user || !region) { + return '' + } + + return `Session: ${posthog + .get_session_replay_url({ withTimestamp: true, timestampLookBack: 30 }) + .replace(window.location.origin + '/replay/', 'http://go/session/')} ${ + !window.location.href.includes('settings/project') ? `(at ${window.location.href})` : '' + }\n${`Admin: ${`http://go/adminOrg${region}/${user.organization?.id}`} (Project: ${ + teamLogic.values.currentTeamId + })`}\nSentry: ${`http://go/sentry${region}/${user.team?.id}`}` +} + function getSessionReplayLink(): string { const link = posthog .get_session_replay_url({ withTimestamp: true, timestampLookBack: 30 }) diff --git a/frontend/src/scenes/settings/project/ProjectSettings.tsx b/frontend/src/scenes/settings/project/ProjectSettings.tsx index 99a71270d299f..013e66f4417d4 100644 --- a/frontend/src/scenes/settings/project/ProjectSettings.tsx +++ b/frontend/src/scenes/settings/project/ProjectSettings.tsx @@ -6,11 +6,13 @@ import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authoriz import { CodeSnippet } from 'lib/components/CodeSnippet' import { JSBookmarklet } from 'lib/components/JSBookmarklet' import { JSSnippet } from 'lib/components/JSSnippet' +import { getPublicSupportSnippet } from 'lib/components/Support/supportLogic' import { IconRefresh } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' import { useState } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { isAuthenticatedTeam, teamLogic } from 'scenes/teamLogic' +import { userLogic } from 'scenes/userLogic' import { TimezoneConfig } from './TimezoneConfig' import { WeekStartConfig } from './WeekStartConfig' @@ -90,6 +92,7 @@ export function ProjectVariables(): JSX.Element { const { currentTeam, isTeamTokenResetAvailable } = useValues(teamLogic) const { resetToken } = useActions(teamLogic) const { preflight } = useValues(preflightLogic) + const { user } = useValues(userLogic) const region = preflight?.region const openDialog = (): void => { @@ -152,6 +155,17 @@ export function ProjectVariables(): JSX.Element { {`${region} Cloud`} ) : null} + {region && user ? ( +
+

+ Debug information +

+

Include this snippet when opening a Feature request or Bug report on GitHub.

+ + {getPublicSupportSnippet(region, user)} + +
+ ) : null} ) }