Prima implementazione pagina "Attività"
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
@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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user