|
6 | 6 |
|
7 | 7 | @inject IInsightsService Service |
8 | 8 | @inject TooltipService tooltipService |
9 | | - |
| 9 | +<div> |
10 | 10 | <RadzenStack Gap="20"> |
11 | 11 | <RadzenRow JustifyContent="JustifyContent.End"> |
12 | 12 | <GlobalFilters /> |
|
34 | 34 | </RadzenCard> |
35 | 35 | } |
36 | 36 |
|
37 | | - <RadzenCard> |
38 | | - <RadzenStack> |
39 | | - <h2>@perDayHeader</h2> |
40 | | - @if (isLoadingGraph) |
41 | | - { |
42 | | - <RadzenProgressBarCircular Value="100" ShowValue="false" Mode="ProgressBarMode.Indeterminate"/> |
43 | | - } |
44 | | - else |
45 | | - { |
46 | | - <RadzenChart> |
47 | | - <RadzenLegend Visible="false"/> |
48 | | - <RadzenLineSeries Data="@errorsPerDays" CategoryProperty="Date" ValueProperty="Count"> |
49 | | - <RadzenMarkers MarkerType="MarkerType.Circle"/> |
50 | | - <RadzenSeriesDataLabels/> |
51 | | - </RadzenLineSeries> |
52 | | - <RadzenCategoryAxis Visible="false"></RadzenCategoryAxis> |
53 | | - </RadzenChart> |
54 | | - } |
55 | | - </RadzenStack> |
56 | | - </RadzenCard> |
| 37 | + <!-- begin wrapbox with per-platform (left) and per-day (right) --> |
| 38 | + <div class="wrapbox"> |
| 39 | + <div class="wrapitem"> |
| 40 | + <RadzenCard> |
| 41 | + <RadzenStack> |
| 42 | + <h2>@perDayHeader</h2> |
| 43 | + @if (isLoadingGraph) |
| 44 | + { |
| 45 | + <RadzenProgressBarCircular Value="100" ShowValue="false" Mode="ProgressBarMode.Indeterminate"/> |
| 46 | + } |
| 47 | + else |
| 48 | + { |
| 49 | + <RadzenChart> |
| 50 | + <RadzenLegend Visible="false"/> |
| 51 | + <RadzenLineSeries Data="@errorsPerDays" CategoryProperty="Date" ValueProperty="Count"> |
| 52 | + <RadzenMarkers MarkerType="MarkerType.Circle"/> |
| 53 | + <RadzenSeriesDataLabels/> |
| 54 | + </RadzenLineSeries> |
| 55 | + <RadzenCategoryAxis Visible="false"></RadzenCategoryAxis> |
| 56 | + </RadzenChart> |
| 57 | + } |
| 58 | + </RadzenStack> |
| 59 | + </RadzenCard> |
| 60 | + </div> |
| 61 | + <div class="wrapitem wrapitem-small"> |
| 62 | + <RadzenCard> |
| 63 | + <RadzenStack> |
| 64 | + <h2>@perPlatformHeader</h2> |
| 65 | + @if (isLoadingPerPlatform) |
| 66 | + { |
| 67 | + <RadzenProgressBarCircular Value="100" ShowValue="false" Mode="ProgressBarMode.Indeterminate" /> |
| 68 | + } |
| 69 | + else |
| 70 | + { |
| 71 | + <RadzenChart> |
| 72 | + <RadzenPieSeries Data="@perPlatform" Title="@perPlatformHeader" CategoryProperty="@nameof(CountPerKey.Key)" ValueProperty="@nameof(CountPerKey.Count)"> |
| 73 | + <RadzenSeriesDataLabels Visible="true" /> |
| 74 | + </RadzenPieSeries> |
| 75 | + </RadzenChart> |
| 76 | + } |
| 77 | + </RadzenStack> |
| 78 | + </RadzenCard> |
| 79 | + </div> |
| 80 | + </div> |
| 81 | + <!-- end wrapbox --> |
57 | 82 |
|
58 | 83 | <RadzenCard> |
59 | 84 | <RadzenStack> |
|
102 | 127 | </RadzenStack> |
103 | 128 | </RadzenCard> |
104 | 129 | </RadzenStack> |
| 130 | +</div> |
105 | 131 | @code { |
106 | 132 |
|
107 | 133 | [Parameter] |
|
120 | 146 | private bool isCrash; |
121 | 147 | private string perDayHeader, listHeader = string.Empty; |
122 | 148 |
|
| 149 | + private List<CountPerKey> perPlatform = new(); |
| 150 | + private bool isLoadingPerPlatform = true; |
| 151 | + private string perPlatformHeader = string.Empty; |
| 152 | + |
123 | 153 | protected override async Task OnParametersSetAsync() |
124 | 154 | { |
125 | 155 | await base.OnParametersSetAsync(); |
|
132 | 162 | isCrash = true; |
133 | 163 | perDayHeader = "Crashes per day"; |
134 | 164 | listHeader = "Crashes"; |
| 165 | + perPlatformHeader = "Crashes per platform"; |
135 | 166 | } |
136 | 167 | else |
137 | 168 | { |
138 | 169 | isCrash = false; |
139 | 170 | perDayHeader = "Errors per day"; |
140 | 171 | listHeader = "Errors"; |
| 172 | + perPlatformHeader = "Errors per platform"; |
141 | 173 | } |
142 | 174 |
|
143 | 175 | await LoadData(); |
|
149 | 181 | { |
150 | 182 | var graphTask = LoadGraph(); |
151 | 183 | var listTask = LoadList(); |
| 184 | + var platformTask = LoadPerPlatform(); |
152 | 185 |
|
153 | | - await Task.WhenAll(graphTask, listTask); |
| 186 | + await Task.WhenAll(graphTask, listTask, platformTask); |
154 | 187 | } |
155 | 188 | catch (Exception ex) |
156 | 189 | { |
|
196 | 229 | await InvokeAsync(StateHasChanged); |
197 | 230 | } |
198 | 231 |
|
| 232 | + private async Task LoadPerPlatform() |
| 233 | + { |
| 234 | + isLoadingPerPlatform = true; |
| 235 | + |
| 236 | + if (isCrash) |
| 237 | + { |
| 238 | + perPlatform = await Service.GetCrashesPerOperatingSystem(GlobalFilter); |
| 239 | + } |
| 240 | + else |
| 241 | + { |
| 242 | + var filter = selectedSeverities.Where(x => x != All).ToList(); |
| 243 | + perPlatform = await Service.GetErrorsPerOperatingSystem(GlobalFilter, filter); |
| 244 | + } |
| 245 | + |
| 246 | + isLoadingPerPlatform = false; |
| 247 | + await InvokeAsync(StateHasChanged); |
| 248 | + } |
| 249 | + |
199 | 250 | private async Task LoadList() |
200 | 251 | { |
201 | 252 | isLoadingList = true; |
|
0 commit comments