Files
SteUP_Dotnet/SteUp.Shared/Core/Helpers/SchedaSyncHelper.cs
T
MarcoE c454474f49 Migliora IspezionePage e form scheda (design review impeccable)
Ispezione:
- Stato sync visibile: badge per-scheda (Da inviare/Inviato) e contatore
  "N da inviare" per reparto (nuovo SchedaSyncHelper)
- Completamento: progresso reale nell'overlay + spunta di successo;
  NON completa se una scheda fallisce (resta editabile, schede "Da inviare")
- Export reparto/completamento blindati: conferma + guardia anti doppio-tap,
  try/finally che libera sempre l'overlay
- Accento corallo unico per l'azione "invia"; target di tocco >=44px;
  empty state; solo il primo pannello espanso di default
- Tasto "Invia" nascosto sulle schede gia inviate
- Messaggio d'errore comprensibile in campo (dettaglio tecnico nei log)
- Fix OnSchedaModified (index >= 0)

Aspetto card:
- SchedaCard e InspectionCard: superficie Carta + hairline border + ombra
  morbida (nuovo token --card-box-shadow); pagina con tinta Grigio Campo
- SchedaCard compattata

Form scheda (ModalFormScheda):
- Tasto Salva/Aggiorna full-width
- Fix "Suggerisci note descrittive": la nota selezionata ora viene inserita
  nel campo (metodo async sul thread UI + OnAfterChangeValue)

StatusEnum: etichette in sentence-case

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 16:39:20 +02:00

57 lines
1.8 KiB
C#

using MudBlazor;
using SteUp.Shared.Core.Entities;
namespace SteUp.Shared.Core.Helpers;
/// <summary>
/// Stato di sincronizzazione di una scheda rispetto al server Integry.
/// Principio "Offline è la verità": il rilevatore deve sempre vedere cosa è
/// ancora solo sul dispositivo e cosa è già arrivato al server.
/// </summary>
public enum SyncState
{
/// Salvata solo in locale, non ancora inviata al server.
DaInviare = 0,
/// Inviata al server (ha un ActivityId).
Inviato = 1
}
public static class SchedaSyncHelper
{
public static SyncState GetSyncState(this Scheda scheda) =>
string.IsNullOrEmpty(scheda.ActivityId) ? SyncState.DaInviare : SyncState.Inviato;
public static string ToLabel(this SyncState state) =>
state switch
{
SyncState.DaInviare => "Da inviare",
SyncState.Inviato => "Inviato",
_ => string.Empty
};
/// <summary>
/// Colore del badge. Corallo (Primary) = azione richiesta (da inviare);
/// verde (Success) = fatto (inviato). Rispetta la Regola dell'Unico Accento.
/// </summary>
public static Color GetColor(this SyncState state) =>
state switch
{
SyncState.DaInviare => Color.Primary,
SyncState.Inviato => Color.Success,
_ => Color.Default
};
public static string GetIcon(this SyncState state) =>
state switch
{
SyncState.DaInviare => Icons.Material.Rounded.PhonelinkOff,
SyncState.Inviato => Icons.Material.Rounded.CloudDone,
_ => string.Empty
};
/// Numero di schede non ancora inviate in una lista.
public static int CountDaInviare(this IEnumerable<Scheda> schede) =>
schede.Count(s => s.GetSyncState() == SyncState.DaInviare);
}