diff --git a/static/app/components/profiling/continuousProfileHeader.tsx b/static/app/components/profiling/continuousProfileHeader.tsx index 0c3efebf108d21..f675bc1a9b8b5d 100644 --- a/static/app/components/profiling/continuousProfileHeader.tsx +++ b/static/app/components/profiling/continuousProfileHeader.tsx @@ -13,6 +13,8 @@ import {trackAnalytics} from 'sentry/utils/analytics'; import {generateLinkToEventInTraceView} from 'sentry/utils/discover/urls'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; interface ContinuousProfileHeader { transaction: Event | null; @@ -21,6 +23,7 @@ interface ContinuousProfileHeader { export function ContinuousProfileHeader({transaction}: ContinuousProfileHeader) { const location = useLocation(); const organization = useOrganization(); + const hasPageFrameFeature = useHasPageFrameFeature(); // @TODO add breadcrumbs when other views are implemented const breadCrumbs = useMemo((): ProfilingBreadcrumbsProps['trails'] => { @@ -51,7 +54,13 @@ export function ContinuousProfileHeader({transaction}: ContinuousProfileHeader) - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} {transactionTarget && ( {t('Go to Trace')} diff --git a/static/app/components/profiling/profileHeader.tsx b/static/app/components/profiling/profileHeader.tsx index f2ef1609fecc13..270561785dfbf3 100644 --- a/static/app/components/profiling/profileHeader.tsx +++ b/static/app/components/profiling/profileHeader.tsx @@ -13,6 +13,8 @@ import {generateLinkToEventInTraceView} from 'sentry/utils/discover/urls'; import {isSchema, isSentrySampledProfile} from 'sentry/utils/profiling/guards/profile'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; import {useProfiles} from 'sentry/views/profiling/profilesProvider'; function getTransactionName(input: Profiling.ProfileInput): string { @@ -36,6 +38,7 @@ function ProfileHeader({transaction, projectId, eventId}: ProfileHeaderProps) { const location = useLocation(); const organization = useOrganization(); const profiles = useProfiles(); + const hasPageFrameFeature = useHasPageFrameFeature(); const transactionName = profiles.type === 'resolved' ? getTransactionName(profiles.data) : ''; @@ -89,7 +92,13 @@ function ProfileHeader({transaction, projectId, eventId}: ProfileHeaderProps) { - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} {transactionTarget && ( {t('Go to Trace')} diff --git a/static/app/views/alerts/list/header.tsx b/static/app/views/alerts/list/header.tsx index 45d9f39dbb3d1a..8575b98953b047 100644 --- a/static/app/views/alerts/list/header.tsx +++ b/static/app/views/alerts/list/header.tsx @@ -15,6 +15,8 @@ import {useLocation} from 'sentry/utils/useLocation'; import {useNavigate} from 'sentry/utils/useNavigate'; import {useOrganization} from 'sentry/utils/useOrganization'; import {makeAlertsPathname} from 'sentry/views/alerts/pathnames'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; type Props = { activeTab: 'stream' | 'rules'; @@ -25,6 +27,7 @@ export function AlertHeader({activeTab}: Props) { const location = useLocation(); const organization = useOrganization(); const {selection} = usePageFilters(); + const hasPageFrameFeature = useHasPageFrameFeature(); /** * Incidents list is currently at the organization level, but the link needs to * go down to a specific project scope. @@ -79,7 +82,13 @@ export function AlertHeader({activeTab}: Props) { > {t('Create Alert')} - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} + + {null} + + + ); + } + return ( - + {t('Feedback')} ); diff --git a/static/app/views/dashboards/manage/index.tsx b/static/app/views/dashboards/manage/index.tsx index 584308e6e56fb7..e64809dd3e8ec0 100644 --- a/static/app/views/dashboards/manage/index.tsx +++ b/static/app/views/dashboards/manage/index.tsx @@ -59,6 +59,8 @@ import type {DashboardsLayout} from 'sentry/views/dashboards/manage/types'; import {DashboardFilter, PREBUILT_DASHBOARD_LABEL} from 'sentry/views/dashboards/types'; import type {DashboardDetails, DashboardListItem} from 'sentry/views/dashboards/types'; import {PREBUILT_DASHBOARDS} from 'sentry/views/dashboards/utils/prebuiltConfigs'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; import RouteError from 'sentry/views/routeError'; import DashboardGrid from './dashboardGrid'; @@ -162,6 +164,7 @@ function ManageDashboards() { const navigate = useNavigate(); const location = useLocation(); const api = useApi(); + const hasPageFrameFeature = useHasPageFrameFeature(); const dashboardGridRef = useRef(null); const hasPrebuiltDashboards = organization.features.includes( 'dashboards-prebuilt-insights-dashboards' @@ -645,7 +648,13 @@ function ManageDashboards() { )} - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} {({hasFeature: hasAiGenerate}) => hasAiGenerate && areAiFeaturesAllowed ? ( diff --git a/static/app/views/detectors/components/monitorFeedbackButton.tsx b/static/app/views/detectors/components/monitorFeedbackButton.tsx index 39b1aa569c2b7c..e3596307921e26 100644 --- a/static/app/views/detectors/components/monitorFeedbackButton.tsx +++ b/static/app/views/detectors/components/monitorFeedbackButton.tsx @@ -1,18 +1,29 @@ import {FeedbackButton} from 'sentry/components/feedbackButton/feedbackButton'; import {t} from 'sentry/locale'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; + +const monitorFeedbackOptions = { + messagePlaceholder: t('How can we improve the monitor experience?'), + tags: { + ['feedback.source']: 'monitors', + ['feedback.owner']: 'aci', + }, +}; export function MonitorFeedbackButton() { + const hasPageFrameFeature = useHasPageFrameFeature(); + + if (hasPageFrameFeature) { + return ( + + {null} + + ); + } + return ( - + {t('Feedback')} ); diff --git a/static/app/views/explore/errors/content.tsx b/static/app/views/explore/errors/content.tsx index c90ebe193d5ce4..36ece8bc0e7dfd 100644 --- a/static/app/views/explore/errors/content.tsx +++ b/static/app/views/explore/errors/content.tsx @@ -16,6 +16,8 @@ import { } from 'sentry/views/explore/errors/body'; import {ErrorsFilterSection} from 'sentry/views/explore/errors/filterContent'; import {useControlSectionExpanded} from 'sentry/views/explore/hooks/useControlSectionExpanded'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; export default function ErrorsContent() { const organization = useOrganization(); @@ -37,6 +39,7 @@ export default function ErrorsContent() { } function ErrorsHeader() { + const hasPageFrameFeature = useHasPageFrameFeature(); return ( @@ -45,7 +48,13 @@ function ErrorsHeader() { - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} ); diff --git a/static/app/views/explore/logs/content.tsx b/static/app/views/explore/logs/content.tsx index 4ebebdfa5eff23..628aca2aa2cc9f 100644 --- a/static/app/views/explore/logs/content.tsx +++ b/static/app/views/explore/logs/content.tsx @@ -33,6 +33,8 @@ import { } from 'sentry/views/explore/queryParams/context'; import {TraceItemDataset} from 'sentry/views/explore/types'; import {useOnboardingProject} from 'sentry/views/insights/common/queries/useOnboardingProject'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; export default function LogsContent() { const organization = useOrganization(); @@ -93,12 +95,21 @@ export default function LogsContent() { ); } +const logsFeedbackOptions = { + messagePlaceholder: t('How can we make logs work better for you?'), + tags: { + ['feedback.source']: 'logs-listing', + ['feedback.owner']: 'performance', + }, +}; + function LogsHeader() { const pageId = useQueryParamsId(); const title = useQueryParamsTitle(); const organization = useOrganization(); const {data: savedQuery} = useGetSavedQuery(pageId); const onboardingProject = useOnboardingProject({property: 'hasLogs'}); + const hasPageFrameFeature = useHasPageFrameFeature(); const hasSavedQueryTitle = defined(pageId) && defined(savedQuery) && savedQuery.name.length > 0; @@ -120,15 +131,15 @@ function LogsHeader() { - + {hasPageFrameFeature ? ( + + + {null} + + + ) : ( + + )} {defined(onboardingProject) && } diff --git a/static/app/views/explore/metrics/content.tsx b/static/app/views/explore/metrics/content.tsx index 723ddbba3e85d6..ae56b4ec7230d1 100644 --- a/static/app/views/explore/metrics/content.tsx +++ b/static/app/views/explore/metrics/content.tsx @@ -25,6 +25,8 @@ import { } from 'sentry/views/explore/queryParams/savedQuery'; import {TraceItemDataset} from 'sentry/views/explore/types'; import {useOnboardingProject} from 'sentry/views/insights/common/queries/useOnboardingProject'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; export default function MetricsContent() { const organization = useOrganization(); @@ -69,12 +71,21 @@ export default function MetricsContent() { ); } +const metricsFeedbackOptions = { + messagePlaceholder: t('How can we make metrics work better for you?'), + tags: { + ['feedback.source']: 'metrics-listing', + ['feedback.owner']: 'performance', + }, +}; + function MetricsHeader() { const location = useLocation(); const pageId = getIdFromLocation(location, ID_KEY); const title = getTitleFromLocation(location, TITLE_KEY); const organization = useOrganization(); const {data: savedQuery} = useGetSavedQuery(pageId); + const hasPageFrameFeature = useHasPageFrameFeature(); const hasSavedQueryTitle = defined(pageId) && defined(savedQuery) && savedQuery.name.length > 0; @@ -97,15 +108,15 @@ function MetricsHeader() { - + {hasPageFrameFeature ? ( + + + {null} + + + ) : ( + + )} ); diff --git a/static/app/views/explore/multiQueryMode/index.tsx b/static/app/views/explore/multiQueryMode/index.tsx index e429ca30a6d101..bff601aa6b4a01 100644 --- a/static/app/views/explore/multiQueryMode/index.tsx +++ b/static/app/views/explore/multiQueryMode/index.tsx @@ -16,6 +16,8 @@ import {useGetSavedQuery} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {MultiQueryModeContent} from 'sentry/views/explore/multiQueryMode/content'; import {SavedQueryEditMenu} from 'sentry/views/explore/savedQueryEditMenu'; import {StarSavedQueryButton} from 'sentry/views/explore/starSavedQueryButton'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; import {makeTracesPathname} from 'sentry/views/traces/pathnames'; export default function MultiQueryMode() { @@ -25,6 +27,7 @@ export default function MultiQueryMode() { const id = getIdFromLocation(location); const {data: savedQuery} = useGetSavedQuery(id); + const hasPageFrameFeature = useHasPageFrameFeature(); return ( {defined(id) && savedQuery?.isPrebuilt === false && } - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} diff --git a/static/app/views/explore/savedQueries/index.tsx b/static/app/views/explore/savedQueries/index.tsx index 0b44748131f42d..9881a1373569a6 100644 --- a/static/app/views/explore/savedQueries/index.tsx +++ b/static/app/views/explore/savedQueries/index.tsx @@ -14,11 +14,14 @@ import {isLogsEnabled} from 'sentry/views/explore/logs/isLogsEnabled'; import {getLogsUrl} from 'sentry/views/explore/logs/utils'; import {SavedQueriesLandingContent} from 'sentry/views/explore/savedQueries/savedQueriesLandingContent'; import {getExploreUrl} from 'sentry/views/explore/utils'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; export default function SavedQueriesView() { const organization = useOrganization(); const hasLogsFeature = isLogsEnabled(organization); const navigate = useNavigate(); + const hasPageFrameFeature = useHasPageFrameFeature(); const items = [ { @@ -48,7 +51,13 @@ export default function SavedQueriesView() { - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} {hasLogsFeature ? ( 0; @@ -182,7 +185,13 @@ function SpansTabHeader() { {defined(id) && savedQuery?.isPrebuilt === false && } - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )} diff --git a/static/app/views/feedback/feedbackListPage.tsx b/static/app/views/feedback/feedbackListPage.tsx index 6660330939780b..081fe13f8a8d86 100644 --- a/static/app/views/feedback/feedbackListPage.tsx +++ b/static/app/views/feedback/feedbackListPage.tsx @@ -30,9 +30,19 @@ import {useLocation} from 'sentry/utils/useLocation'; import {useMedia} from 'sentry/utils/useMedia'; import {useOrganization} from 'sentry/utils/useOrganization'; import {makeAlertsPathname} from 'sentry/views/alerts/pathnames'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; + +const userFeedbackFeedbackOptions = { + messagePlaceholder: t('How can we improve the User Feedback experience?'), + tags: { + ['feedback.source']: 'feedback-list', + }, +}; export default function FeedbackListPage() { const organization = useOrganization(); + const hasPageFrameFeature = useHasPageFrameFeature(); const {hasSetupOneFeedback} = useHaveSelectedProjectsSetupFeedback(); const pageFilters = usePageFilters(); @@ -153,17 +163,18 @@ export default function FeedbackListPage() { - + {hasPageFrameFeature ? ( + + + {null} + + + ) : ( + + )} } diff --git a/static/app/views/insights/crons/components/monitorHeaderActions.tsx b/static/app/views/insights/crons/components/monitorHeaderActions.tsx index 40ed381e41d8fd..9fe38119731cd2 100644 --- a/static/app/views/insights/crons/components/monitorHeaderActions.tsx +++ b/static/app/views/insights/crons/components/monitorHeaderActions.tsx @@ -15,6 +15,8 @@ import {useNavigate} from 'sentry/utils/useNavigate'; import {useOrganization} from 'sentry/utils/useOrganization'; import {makeAlertsPathname} from 'sentry/views/alerts/pathnames'; import type {Monitor} from 'sentry/views/insights/crons/types'; +import {TopBar} from 'sentry/views/navigation/topBar'; +import {useHasPageFrameFeature} from 'sentry/views/navigation/useHasPageFrameFeature'; import {StatusToggleButton} from './statusToggleButton'; @@ -29,6 +31,7 @@ export function MonitorHeaderActions({monitor, orgSlug, onUpdate}: Props) { const navigate = useNavigate(); const organization = useOrganization(); const {selection} = usePageFilters(); + const hasPageFrameFeature = useHasPageFrameFeature(); const endpointOptions = { query: { @@ -84,7 +87,13 @@ export function MonitorHeaderActions({monitor, orgSlug, onUpdate}: Props) { return ( - + {hasPageFrameFeature ? ( + + {null} + + ) : ( + + )}