Files
Fixiy/Fixiy.Shared/Components/Pages/Attivita.razor
T

127 lines
3.3 KiB
Plaintext

@page "/attivita"
@rendermode @(InteractiveServer)
@inject MockAttivitaService MockService
<div class="attivita-page">
<div class="page-header">
<div>
<h1 class="page-title">Attività</h1>
<span class="page-date">@DateTime.Today.ToString("dddd d MMMM", new System.Globalization.CultureInfo("it-IT"))</span>
</div>
<div class="page-header-actions">
<span class="counter-badge">@_attivita.Count(a => a.Stato == StatoAttivita.Aperta) aperte</span>
<button type="button" class="btn-fine-viaggio" @onclick="FineViaggio">
<i class="ri-flag-2-line"></i>
Fine Viaggio
</button>
</div>
</div>
@if (!_attivita.Any())
{
<NoDataAvailable
ImageSource="_content/Fixiy.Shared/images/empty-state.svg"
Text="Nessuna attività per oggi" />
}
else
{
<div class="attivita-list">
@foreach (var item in AttivitaOrdinata)
{
<AttivitaCard
Attivita="item"
OnChiudi="ApriChiusura"
OnVisualizzaAllegati="ApriAllegati"
OnDragStart="OnDragStart"
OnDrop="OnDrop" />
}
</div>
}
</div>
<ChiusuraModal
Attivita="_attivitaSelezionata"
Visible="_chiusuraVisible"
OnClosed="() => _chiusuraVisible = false"
OnConferma="OnConfermaChiusura" />
<AllegatiModal
Attivita="_attivitaSelezionata"
Visible="_allegatiVisible"
OnClosed="() => _allegatiVisible = false" />
@code {
List<AttivitaItem> _attivita = [];
AttivitaItem? _attivitaSelezionata;
bool _chiusuraVisible;
bool _allegatiVisible;
AttivitaItem? _dragSource;
IEnumerable<AttivitaItem> AttivitaOrdinata =>
_attivita.OrderBy(a => a.Priorita switch
{
PrioritaAttivita.Emergenza => 0,
PrioritaAttivita.Alta => 1,
_ => 2
})
.ThenBy(a => a.Ordine);
protected override void OnInitialized()
{
_attivita = MockService.GetAttivitaOggi();
}
void ApriChiusura(AttivitaItem item)
{
_attivitaSelezionata = item;
_chiusuraVisible = true;
}
void ApriAllegati(AttivitaItem item)
{
_attivitaSelezionata = item;
_allegatiVisible = true;
}
void OnConfermaChiusura((AttivitaItem item, StatoAttivita stato) args)
{
var idx = _attivita.IndexOf(args.item);
if (idx >= 0)
_attivita[idx] = args.item with { Stato = args.stato };
_chiusuraVisible = false;
}
void OnDragStart(AttivitaItem item)
{
if (!item.IsLocked)
_dragSource = item;
}
void OnDrop(AttivitaItem target)
{
if (_dragSource is null || _dragSource == target || target.IsLocked)
return;
var srcIdx = _attivita.IndexOf(_dragSource);
var tgtIdx = _attivita.IndexOf(target);
if (srcIdx < 0 || tgtIdx < 0) return;
_attivita.RemoveAt(srcIdx);
_attivita.Insert(tgtIdx, _dragSource);
for (int i = 0; i < _attivita.Count; i++)
_attivita[i] = _attivita[i] with { Ordine = i };
_dragSource = null;
}
void FineViaggio()
{
// TODO: generare e inviare PDF/CSV via email
}
}