127 lines
3.3 KiB
Plaintext
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
|
|
}
|
|
}
|
|
|