using Microsoft.AspNetCore.Mvc; using PlanTempus.Application.Features.Localization.Services; namespace PlanTempus.Application.Features.Dashboard.Components; public class BookingListViewComponent : ViewComponent { private readonly ILocalizationService _localization; public BookingListViewComponent(ILocalizationService localization) { _localization = localization; } public IViewComponentResult Invoke(string key) { var model = BookingListCatalog.Get(key, _localization); return View(model); } } public class BookingListViewModel { public required string Key { get; init; } public required string Title { get; init; } public required string CurrentTime { get; init; } public required IReadOnlyList BookingKeys { get; init; } } internal class BookingListData { public required string Key { get; init; } public required string TitleKey { get; init; } public required string CurrentTime { get; init; } public required IReadOnlyList BookingKeys { get; init; } } public static class BookingListCatalog { private static readonly Dictionary Lists = new() { ["todays-bookings"] = new BookingListData { Key = "todays-bookings", TitleKey = "dashboard.bookings.title", CurrentTime = "10:45", BookingKeys = ["booking-1", "booking-2", "booking-3", "booking-4", "booking-5", "booking-6"] } }; public static BookingListViewModel Get(string key, ILocalizationService localization) { if (!Lists.TryGetValue(key, out var list)) throw new KeyNotFoundException($"BookingList with key '{key}' not found"); return new BookingListViewModel { Key = list.Key, Title = localization.Get(list.TitleKey), CurrentTime = list.CurrentTime, BookingKeys = list.BookingKeys }; } }