1
- import React , { Fragment , useState } from 'react' ;
1
+ import { Fragment , useState } from 'react' ;
2
2
import styled from '@emotion/styled' ;
3
3
4
4
import * as Layout from 'sentry/components/layouts/thirds' ;
@@ -9,13 +9,14 @@ import {ModulePageProviders} from 'sentry/views/insights/common/components/modul
9
9
import { ModulesOnboardingPanel } from 'sentry/views/insights/common/components/modulesOnboarding' ;
10
10
import { ToolRibbon } from 'sentry/views/insights/common/components/ribbon' ;
11
11
import SubregionSelector from 'sentry/views/insights/common/views/spans/selectors/subregionSelector' ;
12
- import { BackendHeader } from 'sentry/views/insights/pages/backend/backendPageHeader' ;
13
- import { BACKEND_LANDING_SUB_PATH } from 'sentry/views/insights/pages/backend/settings' ;
14
12
import { FrontendHeader } from 'sentry/views/insights/pages/frontend/frontendPageHeader' ;
15
13
import { FRONTEND_LANDING_SUB_PATH } from 'sentry/views/insights/pages/frontend/settings' ;
16
14
import { MobileHeader } from 'sentry/views/insights/pages/mobile/mobilePageHeader' ;
17
15
import { MOBILE_LANDING_SUB_PATH } from 'sentry/views/insights/pages/mobile/settings' ;
18
- import { useDomainViewFilters } from 'sentry/views/insights/pages/useFilters' ;
16
+ import {
17
+ type DomainView ,
18
+ useDomainViewFilters ,
19
+ } from 'sentry/views/insights/pages/useFilters' ;
19
20
import CrashFreeSessionsChart from 'sentry/views/insights/sessions/charts/crashFreeSessionsChart' ;
20
21
import ErrorFreeSessionsChart from 'sentry/views/insights/sessions/charts/errorFreeSessionsChart' ;
21
22
import ReleaseSessionCountChart from 'sentry/views/insights/sessions/charts/releaseSessionCountChart' ;
@@ -30,10 +31,6 @@ import useProjectHasSessions from 'sentry/views/insights/sessions/queries/usePro
30
31
import { ModuleName } from 'sentry/views/insights/types' ;
31
32
32
33
export function SessionsOverview ( ) {
33
- const headerProps = {
34
- module : ModuleName . SESSIONS ,
35
- } ;
36
-
37
34
const { view = '' } = useDomainViewFilters ( ) ;
38
35
39
36
const [ filters , setFilters ] = useState < string [ ] > ( [ '' ] ) ;
@@ -42,38 +39,9 @@ export function SessionsOverview() {
42
39
const hasSessionData = useProjectHasSessions ( ) ;
43
40
const showOnboarding = ! hasSessionData ;
44
41
45
- const SESSION_HEALTH_CHARTS = (
46
- < Fragment >
47
- { view === FRONTEND_LANDING_SUB_PATH ? (
48
- < ModuleLayout . Third >
49
- < ErrorFreeSessionsChart />
50
- </ ModuleLayout . Third >
51
- ) : view === MOBILE_LANDING_SUB_PATH ? (
52
- < ModuleLayout . Third >
53
- < CrashFreeSessionsChart />
54
- </ ModuleLayout . Third >
55
- ) : undefined }
56
- < ModuleLayout . Third >
57
- < SessionHealthCountChart view = { view } />
58
- </ ModuleLayout . Third >
59
- < ModuleLayout . Third >
60
- < UserHealthCountChart view = { view } />
61
- </ ModuleLayout . Third >
62
- < ModuleLayout . Third />
63
- < ModuleLayout . Third >
64
- < SessionHealthRateChart view = { view } />
65
- </ ModuleLayout . Third >
66
- < ModuleLayout . Third >
67
- < UserHealthRateChart view = { view } />
68
- </ ModuleLayout . Third >
69
- </ Fragment >
70
- ) ;
71
-
72
42
return (
73
- < React . Fragment >
74
- { view === FRONTEND_LANDING_SUB_PATH && < FrontendHeader { ...headerProps } /> }
75
- { view === BACKEND_LANDING_SUB_PATH && < BackendHeader { ...headerProps } /> }
76
- { view === MOBILE_LANDING_SUB_PATH && < MobileHeader { ...headerProps } /> }
43
+ < Fragment >
44
+ < ViewSpecificHeader view = { view } />
77
45
< Layout . Body >
78
46
< Layout . Main fullWidth >
79
47
< ModuleLayout . Layout >
@@ -93,37 +61,100 @@ export function SessionsOverview() {
93
61
< ModulesOnboardingPanel moduleName = { ModuleName . SESSIONS } />
94
62
</ ModuleLayout . Full >
95
63
) : (
96
- < Fragment >
97
- { view === MOBILE_LANDING_SUB_PATH && (
98
- < Fragment >
99
- { SESSION_HEALTH_CHARTS }
100
- < ModuleLayout . Half >
101
- < ReleaseSessionCountChart />
102
- </ ModuleLayout . Half >
103
- < ModuleLayout . Half >
104
- < ReleaseSessionPercentageChart />
105
- </ ModuleLayout . Half >
106
- < ModuleLayout . Full >
107
- < FilterWrapper >
108
- < FilterReleaseDropdown
109
- filters = { filters }
110
- setFilters = { setFilters }
111
- />
112
- </ FilterWrapper >
113
- < ReleaseHealth filters = { filters } />
114
- </ ModuleLayout . Full >
115
- </ Fragment >
116
- ) }
117
- { view === FRONTEND_LANDING_SUB_PATH && SESSION_HEALTH_CHARTS }
118
- </ Fragment >
64
+ < ViewSpecificCharts view = { view } filters = { filters } setFilters = { setFilters } />
119
65
) }
120
66
</ ModuleLayout . Layout >
121
67
</ Layout . Main >
122
68
</ Layout . Body >
123
- </ React . Fragment >
69
+ </ Fragment >
124
70
) ;
125
71
}
126
72
73
+ function ViewSpecificHeader ( { view} : { view : DomainView | '' } ) {
74
+ switch ( view ) {
75
+ case FRONTEND_LANDING_SUB_PATH :
76
+ return < FrontendHeader module = { ModuleName . SESSIONS } /> ;
77
+ case MOBILE_LANDING_SUB_PATH :
78
+ return < MobileHeader module = { ModuleName . SESSIONS } /> ;
79
+ default :
80
+ return null ;
81
+ }
82
+ }
83
+
84
+ function ViewSpecificCharts ( {
85
+ view,
86
+ filters,
87
+ setFilters,
88
+ } : {
89
+ filters : string [ ] ;
90
+ setFilters : ( filter : string [ ] ) => void ;
91
+ view : DomainView | '' ;
92
+ } ) {
93
+ switch ( view ) {
94
+ case FRONTEND_LANDING_SUB_PATH :
95
+ return (
96
+ < Fragment >
97
+ < ModuleLayout . Third >
98
+ < ErrorFreeSessionsChart />
99
+ </ ModuleLayout . Third >
100
+ < ModuleLayout . Third >
101
+ < SessionHealthCountChart view = { view } />
102
+ </ ModuleLayout . Third >
103
+ < ModuleLayout . Third >
104
+ < UserHealthCountChart view = { view } />
105
+ </ ModuleLayout . Third >
106
+
107
+ < ModuleLayout . Third > Coming soon: New Issues over time</ ModuleLayout . Third >
108
+ < ModuleLayout . Third >
109
+ < SessionHealthRateChart view = { view } />
110
+ </ ModuleLayout . Third >
111
+ < ModuleLayout . Third >
112
+ < UserHealthRateChart view = { view } />
113
+ </ ModuleLayout . Third >
114
+ </ Fragment >
115
+ ) ;
116
+ case MOBILE_LANDING_SUB_PATH :
117
+ return (
118
+ < Fragment >
119
+ < ModuleLayout . Third >
120
+ < CrashFreeSessionsChart />
121
+ </ ModuleLayout . Third >
122
+ < ModuleLayout . Third > Coming soon: New Issues over time</ ModuleLayout . Third >
123
+ < ModuleLayout . Third > Coming soon: New Issues Per release</ ModuleLayout . Third >
124
+
125
+ < ModuleLayout . Third >
126
+ < ReleaseSessionCountChart />
127
+ </ ModuleLayout . Third >
128
+ < ModuleLayout . Third >
129
+ < SessionHealthCountChart view = { view } />
130
+ </ ModuleLayout . Third >
131
+ < ModuleLayout . Third >
132
+ < UserHealthCountChart view = { view } />
133
+ </ ModuleLayout . Third >
134
+
135
+ < ModuleLayout . Third >
136
+ < ReleaseSessionPercentageChart />
137
+ </ ModuleLayout . Third >
138
+ < ModuleLayout . Third >
139
+ < SessionHealthRateChart view = { view } />
140
+ </ ModuleLayout . Third >
141
+ < ModuleLayout . Third >
142
+ < UserHealthRateChart view = { view } />
143
+ </ ModuleLayout . Third >
144
+
145
+ < ModuleLayout . Full >
146
+ < FilterWrapper >
147
+ < FilterReleaseDropdown filters = { filters } setFilters = { setFilters } />
148
+ </ FilterWrapper >
149
+ < ReleaseHealth filters = { filters } />
150
+ </ ModuleLayout . Full >
151
+ </ Fragment >
152
+ ) ;
153
+ default :
154
+ return null ;
155
+ }
156
+ }
157
+
127
158
function PageWithProviders ( ) {
128
159
return (
129
160
< ModulePageProviders
0 commit comments