Files
Samuele Locatelli 7433f6a676 update customDialog
2026-05-05 10:18:37 +02:00

87 lines
3.1 KiB
Plaintext

@using System.Collections.Generic
@using System.Globalization
<div class="mb-3">
@if (!string.IsNullOrWhiteSpace(Title))
{
<div class="d-flex justify-content-between align-items-center mb-1">
<strong>@Title</strong>
@if (Total > 0)
{
<span class="text-muted small">Totale: @Total</span>
}
</div>
}
@if (Total > 0)
{
<div class="progress" style="height: 32px;" role="progressbar" aria-label="@($"Pareto scadenze: {success} OK, {warning} Warning, {danger} Danger")">
<div class="progress-bar bg-success" style="width: @(CalcPctCss(SuccessPct))" title="@($"OK: {success} ({SuccessPct:F1}%)")" aria-valuenow="@SuccessPct" aria-valuemin="0" aria-valuemax="100">
@if (ShowIcon)
{
<span>✅ OK: </span>
}
@success
</div>
<div class="progress-bar bg-warning text-dark" style="width: @(CalcPctCss(WarningPct))" title="@($"Warning: {warning} ({WarningPct:F1}%)")" aria-valuenow="@WarningPct" aria-valuemin="0" aria-valuemax="100">
@if (ShowIcon)
{
<span>⚠️ Warning: </span>
}
@warning
</div>
<div class="progress-bar bg-danger" style="width: @(CalcPctCss(DangerPct))" title="@($"Danger: {danger} ({DangerPct:F1}%)")" aria-valuenow="@DangerPct" aria-valuemin="0" aria-valuemax="100">
@if (ShowIcon)
{
<span>🚨 Danger: </span>
}
@danger
</div>
</div>
}
else
{
<div class="text-muted py-2">Nessun record</div>
}
</div>
@code {
/// <summary>
/// Dizionario valori dussiviso tra success/warning/danger
/// </summary>
[Parameter]
public Dictionary<string, int>? ParetoData { get; set; }
/// <summary>
/// Titolo del display
/// </summary>
[Parameter]
public string Title { get; set; } = "Distribuzione";
/// <summary>
/// Indica se mostrare icona insieme al numero dentro i blocchi
/// </summary>
[Parameter]
public bool ShowIcon { get; set; } = false;
/// <summary>
/// Valore larghezza calcolata in % corretta
/// </summary>
/// <param name="currVal"></param>
/// <returns></returns>
private string CalcPctCss(double currVal)
{
var dblVal = Total > 0 ? currVal / (double)Total * 100 : 0;
return $"{dblVal.ToString("F2", CultureInfo.InvariantCulture)}%";
}
// Proprietà calcolate con fallback sicuro
private int success => ParetoData?.GetValueOrDefault("success", 0) ?? 0;
private int warning => ParetoData?.GetValueOrDefault("warning", 0) ?? 0;
private int danger => ParetoData?.GetValueOrDefault("danger", 0) ?? 0;
private int Total => success + warning + danger;
private double SuccessPct => Total > 0 ? (success / (double)Total) * 100 : 0;
private double WarningPct => Total > 0 ? (warning / (double)Total) * 100 : 0;
private double DangerPct => Total > 0 ? (danger / (double)Total) * 100 : 0;
}