RobotNet/RobotNet.WebApp/Dashboard/Components/MissionsPerformanceBarChart.razor
2025-10-15 15:15:53 +07:00

135 lines
5.2 KiB
Plaintext

@using RobotNet.Script.Shares.Dashboard
@using RobotNet.WebApp.Charts.Components
@using RobotNet.WebApp.Charts.Core
@using RobotNet.WebApp.Charts.Models.BarChart
@using RobotNet.WebApp.Charts.Models.BarChart.Axes
@using RobotNet.WebApp.Charts.Models.Common.Dataset
@using RobotNet.WebApp.Charts.Enums
<div class="paper">
<BarChart @ref="ChartRef" Width="100" WidthUnit="Unit.Percentage" Height="100" HeightUnit="Unit.Percentage" Style="height: 30vh; width: 50vw" />
</div>
@code {
private BarChart ChartRef = default!;
private BarChartOptions ChartOptions = default!;
private ChartData ChartData = default!;
private DailyPerformanceDto[] DataParam = [];
protected override void OnInitialized()
{
var completed = new BarChartDataset() { Label = "Completed", BackgroundColor = [ChartColors.GreenStr], Data = [.. DataParam.Select(d => d.Completed)] };
var error = new BarChartDataset() { Label = "Error", BackgroundColor = [ChartColors.OrangeStr], Data = [.. DataParam.Select(d => d.Error)] };
var other = new BarChartDataset() { Label = "Other", BackgroundColor = [ChartColors.GrayStr], Data = [.. DataParam.Select(d => d.Other)] };
ChartData = new ChartData { Labels = [.. DataParam.Select(d => d.Label)], Datasets = [completed, error, other] };
ChartOptions = new()
{
Responsive = true,
Scales = new()
{
X = new()
{
Title = new ChartAxesTitle
{
Text = "Day",
Display = true,
Color = "#d6d6db",
Font = new()
{
Family = "Roboto",
Size = 15,
}
},
Stacked = true,
Grid = new()
{
Display = false,
},
Ticks = new()
{
Color = "#d6d6db"
}
},
Y = new()
{
Title = new ChartAxesTitle
{
Text = "Mission",
Display = true,
Color = "#d6d6db",
Font = new()
{
Family = "Roboto",
Size = 15,
},
},
Min = 0,
Stacked = true,
Grid = new()
{
Display = false,
},
Ticks = new()
{
Color = "#d6d6db"
}
},
},
Plugins = new()
{
Datalabels = new()
{
Color = "#d6d6db",
BorderColor = "transparent",
},
Title = new()
{
Color = "#d6d6db",
Text = "Weekly AMR Performance",
Font = new()
{
Family = "Roboto",
Size = 20,
Weight = "normal",
},
},
Legend = new()
{
Display = true,
Labels = new()
{
Color = "#d6d6db",
Font = new()
{
Family = "Roboto",
Weight = "normal",
Size = 15,
}
}
}
},
};
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await ChartRef.InitializeAsync(chartData: ChartData, chartOptions: ChartOptions);
}
await base.OnAfterRenderAsync(firstRender);
}
public async Task UpdateData(DailyPerformanceDto[] dataParam)
{
var completed = new BarChartDataset() { Label = "Completed", BackgroundColor = [ChartColors.GreenStr], Data = [.. dataParam.Select(d => d.Completed)] };
var error = new BarChartDataset() { Label = "Error", BackgroundColor = [ChartColors.OrangeStr], Data = [.. dataParam.Select(d => d.Error)] };
var other = new BarChartDataset() { Label = "Other", BackgroundColor = [ChartColors.GrayStr], Data = [.. dataParam.Select(d => d.Other)] };
ChartData = new ChartData { Labels = [.. dataParam.Select(d => d.Label)], Datasets = [completed, error, other] };
await ChartRef.UpdateValuesAsync(ChartData);
}
}