using Microsoft.AspNetCore.Mvc; namespace PlanTempus.Application.Features.Dashboard.Components; /// /// ViewComponent for rendering a waitlist item in the waitlist drawer. /// public class WaitlistItemViewComponent : ViewComponent { public IViewComponentResult Invoke(string key) { var model = WaitlistItemCatalog.Get(key); return View(model); } } /// /// ViewModel for the WaitlistItem component. /// public class WaitlistItemViewModel { public required string Key { get; init; } public required string CustomerName { get; init; } public required string CustomerInitials { get; init; } public required string CustomerPhone { get; init; } public required string Service { get; init; } public required IReadOnlyList PreferredPeriods { get; init; } public required string RegisteredDate { get; init; } public required string ExpiresDate { get; init; } public bool ExpiresSoon { get; init; } } /// /// Catalog of waitlist items with demo data. /// public static class WaitlistItemCatalog { private static readonly Dictionary Items = new() { ["waitlist-1"] = new WaitlistItemViewModel { Key = "waitlist-1", CustomerName = "Emma Christensen", CustomerInitials = "EC", CustomerPhone = "+45 12 34 56 78", Service = "Dameklip + Farve", PreferredPeriods = ["Mandag-Onsdag", "Formiddag"], RegisteredDate = "2. jan 2026", ExpiresDate = "16. jan 2026", ExpiresSoon = false }, ["waitlist-2"] = new WaitlistItemViewModel { Key = "waitlist-2", CustomerName = "Mikkel Sørensen", CustomerInitials = "MS", CustomerPhone = "+45 23 45 67 89", Service = "Herreklip", PreferredPeriods = ["Weekend"], RegisteredDate = "30. dec 2025", ExpiresDate = "6. jan 2026", ExpiresSoon = true }, ["waitlist-3"] = new WaitlistItemViewModel { Key = "waitlist-3", CustomerName = "Lise Andersen", CustomerInitials = "LA", CustomerPhone = "+45 34 56 78 90", Service = "Balayage", PreferredPeriods = ["Tirsdag-Torsdag", "Eftermiddag"], RegisteredDate = "28. dec 2025", ExpiresDate = "11. jan 2026", ExpiresSoon = false }, ["waitlist-4"] = new WaitlistItemViewModel { Key = "waitlist-4", CustomerName = "Peter Hansen", CustomerInitials = "PH", CustomerPhone = "+45 45 67 89 01", Service = "Herreklip + Skæg", PreferredPeriods = ["Fleksibel"], RegisteredDate = "27. dec 2025", ExpiresDate = "10. jan 2026", ExpiresSoon = false } }; public static WaitlistItemViewModel Get(string key) { if (Items.TryGetValue(key, out var item)) return item; throw new KeyNotFoundException($"WaitlistItem with key '{key}' not found"); } public static IEnumerable AllKeys => Items.Keys; }