Files
TodoTicketApp/Components/Pages/Home.razor
T
2026-05-27 11:29:22 +02:00

110 lines
4.0 KiB
Plaintext

@page "/"
@rendermode InteractiveServer
@using TodoTicketApp.Models
@using TodoTicketApp.Services
@inject ITicketService TicketService
@inject NavigationManager Nav
<PageTitle>Ticket Dashboard | Custom Theme</PageTitle>
<div class="main-container">
<header class="dashboard-header">
<h1>Ticket <span>Dashboard</span></h1>
<p class="subtitle">Effiziente FIFO-Verwaltung nach Priorität</p>
</header>
<div class="ticket-anlage">
<input class="custom-input"
placeholder="Neues Ticket-Titel eingeben..."
@bind="newTicketTitle"
@onkeyup="HandleKeyUp" />
</div>
<div class="ticket-list">
@{
bool dividerShown = false;
}
@foreach (var ticket in TicketService.GetPendingTickets())
{
@if (ticket.IsWaitingForFeedback && !dividerShown)
{
<div class="waiting-separator">
<hr class="dashed-line" />
<span class="separator-text">WARTENDE TICKETS</span>
<hr class="dashed-line" />
</div>
dividerShown = true;
}
<div class="ticket-card priority-@ticket.Priority.ToString().ToLower() @(ticket.IsWaitingForFeedback ? "is-waiting" : "")">
<div class="ticket-main-click" @onclick="() => GoToDetails(ticket.Id)">
<div class="card-header-row">
<span class="prio-badge">@ticket.Priority</span>
<small class="ticket-date">@ticket.CreatedAt.ToLocalTime().ToString("g")</small>
</div>
<h5 class="ticket-title">@ticket.Title</h5>
<div class="ticket-preview">
<p>@(ticket.Description.Length > 200 ? ticket.Description.Substring(0, 200) + "..." : ticket.Description)</p>
</div>
</div>
<div class="ticket-actions-row">
<div class="meta-info">
<i class="fa fa-comment"></i> @ticket.Comments.Count
</div>
<div class="action-buttons">
<button class="custom-btn btn-wait"
@onclick="() => ToggleWaitingStatus(ticket)"
@onclick:stopPropagation="true">
@(ticket.IsWaitingForFeedback ? "Warten aufheben" : "Warten")
</button>
<button class="custom-btn btn-complete"
@onclick="() => Complete(ticket.Id)"
@onclick:stopPropagation="true">
Erledigen
</button>
</div>
</div>
</div>
}
</div>
</div>
@code {
private string newTicketTitle = "";
private async Task HandleKeyUp(KeyboardEventArgs e)
{
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(newTicketTitle))
{
var newTicket = new Ticket { Title = newTicketTitle };
TicketService.AddTicket(newTicket);
newTicketTitle = "";
// Hier könnten wir direkt auf die Detailseite navigieren:
// Nav.NavigateTo($"/ticket/edit/{newTicket.Id}");
}
}
private void ToggleWaitingStatus(Ticket ticket)
{
// Status umkehren
ticket.IsWaitingForFeedback = !ticket.IsWaitingForFeedback;
// In der Datenbank speichern
TicketService.UpdateTicket(ticket);
// UI explizit anweisen, sich neu zu sortieren
StateHasChanged();
}
private void Complete(Guid id)
{
TicketService.CompleteTicket(id);
StateHasChanged();
}
private void GoToDetails(Guid id) => Nav.NavigateTo($"/ticket/edit/{id}");
}