PlanTempusApp/PlanTempus.Application/Features/Dashboard/Components/BookingList/BookingListViewComponent.cs

65 lines
1.9 KiB
C#
Raw Normal View History

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<string> 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<string> BookingKeys { get; init; }
}
public static class BookingListCatalog
{
private static readonly Dictionary<string, BookingListData> 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
};
}
}