PlanTempusApp/PlanTempus.Application/Features/Employees/Components/EmployeeRow/EmployeeRowViewComponent.cs
Janus C. H. Knudsen 15579acba8 Various CSS work
2026-01-12 22:10:57 +01:00

145 lines
4.8 KiB
C#

using Microsoft.AspNetCore.Mvc;
using PlanTempus.Application.Features.Localization.Services;
namespace PlanTempus.Application.Features.Employees.Components;
public class EmployeeRowViewComponent : ViewComponent
{
private readonly ILocalizationService _localization;
public EmployeeRowViewComponent(ILocalizationService localization)
{
_localization = localization;
}
public IViewComponentResult Invoke(string key)
{
var model = EmployeeRowCatalog.Get(key, _localization);
return View(model);
}
}
public class EmployeeRowViewModel
{
public required string Key { get; init; }
public required string Initials { get; init; }
public required string Name { get; init; }
public required string Email { get; init; }
public required string Role { get; init; }
public required string RoleText { get; init; }
public required string Status { get; init; }
public required string StatusText { get; init; }
public required string LastActive { get; init; }
public string? AvatarColor { get; init; }
public bool IsOwner { get; init; }
public bool IsInvited { get; init; }
}
internal class EmployeeRowData
{
public required string Key { get; init; }
public required string Initials { get; init; }
public required string Name { get; init; }
public required string Email { get; init; }
public required string Role { get; init; }
public required string RoleKey { get; init; }
public required string Status { get; init; }
public required string StatusKey { get; init; }
public required string LastActive { get; init; }
public string? AvatarColor { get; init; }
}
public static class EmployeeRowCatalog
{
private static readonly Dictionary<string, EmployeeRowData> Employees = new()
{
["employee-1"] = new EmployeeRowData
{
Key = "employee-1",
Initials = "MJ",
Name = "Maria Jensen",
Email = "maria@salonbeauty.dk",
Role = "owner",
RoleKey = "employees.roles.owner",
Status = "active",
StatusKey = "employees.status.active",
LastActive = "I dag, 14:32"
},
["employee-2"] = new EmployeeRowData
{
Key = "employee-2",
Initials = "AS",
Name = "Anna Sørensen",
Email = "anna@salonbeauty.dk",
Role = "admin",
RoleKey = "employees.roles.admin",
Status = "active",
StatusKey = "employees.status.active",
LastActive = "I dag, 12:15",
AvatarColor = "purple"
},
["employee-3"] = new EmployeeRowData
{
Key = "employee-3",
Initials = "LP",
Name = "Louise Pedersen",
Email = "louise@salonbeauty.dk",
Role = "leader",
RoleKey = "employees.roles.leader",
Status = "active",
StatusKey = "employees.status.active",
LastActive = "I går, 17:45",
AvatarColor = "blue"
},
["employee-4"] = new EmployeeRowData
{
Key = "employee-4",
Initials = "KN",
Name = "Katrine Nielsen",
Email = "katrine@salonbeauty.dk",
Role = "employee",
RoleKey = "employees.roles.employee",
Status = "active",
StatusKey = "employees.status.active",
LastActive = "27. dec, 09:30",
AvatarColor = "amber"
},
["employee-5"] = new EmployeeRowData
{
Key = "employee-5",
Initials = "SH",
Name = "Sofie Hansen",
Email = "sofie@salonbeauty.dk",
Role = "employee",
RoleKey = "employees.roles.employee",
Status = "invited",
StatusKey = "employees.status.invited",
LastActive = "-",
AvatarColor = "purple"
}
};
public static EmployeeRowViewModel Get(string key, ILocalizationService localization)
{
if (!Employees.TryGetValue(key, out var employee))
throw new KeyNotFoundException($"Employee with key '{key}' not found");
return new EmployeeRowViewModel
{
Key = employee.Key,
Initials = employee.Initials,
Name = employee.Name,
Email = employee.Email,
Role = employee.Role,
RoleText = localization.Get(employee.RoleKey),
Status = employee.Status,
StatusText = localization.Get(employee.StatusKey),
LastActive = employee.LastActive,
AvatarColor = employee.AvatarColor,
IsOwner = employee.Role == "owner",
IsInvited = employee.Status == "invited"
};
}
public static IEnumerable<string> AllKeys => Employees.Keys;
}