import {Fragment, useState} from 'react'; import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import ReplayRageClickSdkVersionBanner from 'sentry/components/replays/replayRageClickSdkVersionBanner'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {useHaveSelectedProjectsSentAnyReplayEvents} from 'sentry/utils/replays/hooks/useReplayOnboarding'; import {MIN_DEAD_RAGE_CLICK_SDK} from 'sentry/utils/replays/sdkVersions'; import useRouteAnalyticsParams from 'sentry/utils/routeAnalytics/useRouteAnalyticsParams'; import useOrganization from 'sentry/utils/useOrganization'; import usePageFilters from 'sentry/utils/usePageFilters'; import useProjectSdkNeedsUpdate from 'sentry/utils/useProjectSdkNeedsUpdate'; import DeadRageSelectorCards from 'sentry/views/replays/deadRageClick/deadRageSelectorCards'; import useAllMobileProj from 'sentry/views/replays/detail/useAllMobileProj'; import ReplaysFilters from 'sentry/views/replays/list/filters'; import ReplayOnboardingPanel from 'sentry/views/replays/list/replayOnboardingPanel'; import ReplaysList from 'sentry/views/replays/list/replaysList'; import ReplaysSearch from 'sentry/views/replays/list/search'; export default function ListContent() { const organization = useOrganization(); const hasSessionReplay = organization.features.includes('session-replay'); const hasSentReplays = useHaveSelectedProjectsSentAnyReplayEvents(); const { selection: {projects}, } = usePageFilters(); const rageClicksSdkVersion = useProjectSdkNeedsUpdate({ minVersion: MIN_DEAD_RAGE_CLICK_SDK.minVersion, organization, projectId: projects.map(String), }); const {allMobileProj} = useAllMobileProj(); const [widgetIsOpen, setWidgetIsOpen] = useState(true); useRouteAnalyticsParams({ hasSessionReplay, hasSentReplays: hasSentReplays.hasSentOneReplay, hasRageClickMinSDK: !rageClicksSdkVersion.needsUpdate, }); if (hasSentReplays.fetching || rageClicksSdkVersion.isFetching) { return ( ); } if (!hasSessionReplay || !hasSentReplays.hasSentOneReplay) { return ( ); } if (rageClicksSdkVersion.needsUpdate && !allMobileProj) { return ( ); } return ( {!allMobileProj && ( )} {widgetIsOpen && !allMobileProj ? : null} ); } const FiltersContainer = styled('div')` display: flex; flex-direction: row; gap: ${space(2)}; flex-wrap: wrap; `; const SearchWrapper = styled(FiltersContainer)` flex-grow: 1; flex-wrap: nowrap; `;