< Summary

Information
Class: Pomodoro.Web.Components.History.WeeklyMiniChartBase
Assembly: Pomodoro.Web
File(s): /home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Components/History/WeeklyMiniChart.razor.cs
Line coverage
100%
Covered lines: 32
Uncovered lines: 0
Coverable lines: 32
Total lines: 88
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ChartService()100%11100%
get_ChartDataFormatter()100%11100%
get_DailyFocusMinutes()100%11100%
get_BreakDailyMinutes()100%11100%
get_WeekStartDate()100%11100%
get_CanvasId()100%11100%
OnAfterRenderAsync()100%22100%
OnParametersSetAsync()100%22100%
RenderChartAsync()100%11100%
DisposeAsync()100%11100%

File(s)

/home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Components/History/WeeklyMiniChart.razor.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Components;
 2using Microsoft.JSInterop;
 3using Pomodoro.Web.Services;
 4using Pomodoro.Web.Services.Formatters;
 5
 6namespace Pomodoro.Web.Components.History;
 7
 8/// <summary>
 9/// Code-behind for WeeklyMiniChart component
 10/// Displays a weekly bar chart using Chart.js
 11/// </summary>
 12public class WeeklyMiniChartBase : ComponentBase, IAsyncDisposable
 13{
 14    #region Services (Dependency Injection)
 15
 16    [Inject]
 21117    protected ChartService ChartService { get; set; } = default!;
 18
 19    [Inject]
 15120    protected ChartDataFormatter ChartDataFormatter { get; set; } = default!;
 21
 22    #endregion
 23
 24    #region Parameters
 25
 26    [Parameter]
 13727    public Dictionary<DateTime, int> DailyFocusMinutes { get; set; } = new();
 28
 29    [Parameter]
 13730    public Dictionary<DateTime, int> BreakDailyMinutes { get; set; } = new();
 31
 32    [Parameter]
 9133    public DateTime WeekStartDate { get; set; }
 34
 35    #endregion
 36
 37    #region Properties
 38
 21839    protected string CanvasId { get; } = $"{Constants.Charts.WeeklyChartPrefix}{Guid.NewGuid().ToString(Constants.DateFo
 40
 41    #endregion
 42
 43    private bool _isRendered;
 44
 45    #region Lifecycle Methods
 46
 47    protected override async Task OnAfterRenderAsync(bool firstRender)
 5548    {
 5549        if (firstRender)
 4850        {
 4851            _isRendered = true;
 4852            await RenderChartAsync();
 4853        }
 5554    }
 55
 56    protected override async Task OnParametersSetAsync()
 5557    {
 5558        if (_isRendered)
 759        {
 760            await RenderChartAsync();
 761        }
 5562    }
 63
 64    private async Task RenderChartAsync()
 5565    {
 5566        var (labels, focusData, breakData) = ChartDataFormatter.PrepareWeeklyChartData(
 5567            DailyFocusMinutes, BreakDailyMinutes, WeekStartDate);
 5568        await ChartService.CreateGroupedBarChartAsync(CanvasId, labels, focusData, breakData, null);
 5569    }
 70
 71    #endregion
 72
 73    #region IDisposable
 74
 75    public async ValueTask DisposeAsync()
 6076    {
 77        try
 6078        {
 6079            await ChartService.DestroyChartAsync(CanvasId);
 5280        }
 881        catch
 882        {
 83            // Ignore disposal errors
 884        }
 6085    }
 86
 87    #endregion
 88}