Various CSS work

This commit is contained in:
Janus C. H. Knudsen 2026-01-12 22:10:57 +01:00
parent ef174af0e1
commit 15579acba8
52 changed files with 8001 additions and 944 deletions

View file

@ -0,0 +1,74 @@
@model PlanTempus.Application.Features.Employees.Components.EmployeeDetailViewViewModel
<swp-employee-detail-view id="employee-detail-view" data-employee="@Model.EmployeeKey">
<!-- Sticky Header (generic from page.css) -->
<swp-sticky-header>
<swp-header-content>
<!-- Page Header with Back Button -->
<swp-page-header>
<swp-page-title>
<swp-back-link data-employee-back>
<i class="ph ph-arrow-left"></i>
@Model.BackText
</swp-back-link>
</swp-page-title>
<swp-page-actions>
<swp-btn class="primary">
<i class="ph ph-floppy-disk"></i>
@Model.SaveButtonText
</swp-btn>
</swp-page-actions>
</swp-page-header>
<!-- Employee Header -->
@await Component.InvokeAsync("EmployeeDetailHeader", Model.EmployeeKey)
</swp-header-content>
<!-- Tabs (outside header-content, inside sticky-header) -->
<swp-tab-bar>
<swp-tab class="active" data-tab="general">@Model.TabGeneral</swp-tab>
<swp-tab data-tab="hours">@Model.TabHours</swp-tab>
<swp-tab data-tab="services">@Model.TabServices</swp-tab>
<swp-tab data-tab="salary">@Model.TabSalary</swp-tab>
<swp-tab data-tab="hr">@Model.TabHR</swp-tab>
<swp-tab data-tab="stats">@Model.TabStats</swp-tab>
</swp-tab-bar>
</swp-sticky-header>
<!-- Tab Contents -->
<swp-tab-content data-tab="general" class="active">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailGeneral", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
<swp-tab-content data-tab="hours">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailHours", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
<swp-tab-content data-tab="services">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailServices", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
<swp-tab-content data-tab="salary">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailSalary", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
<swp-tab-content data-tab="hr">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailHR", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
<swp-tab-content data-tab="stats">
<swp-page-container>
@await Component.InvokeAsync("EmployeeDetailStats", Model.EmployeeKey)
</swp-page-container>
</swp-tab-content>
</swp-employee-detail-view>

View file

@ -0,0 +1,47 @@
using Microsoft.AspNetCore.Mvc;
using PlanTempus.Application.Features.Localization.Services;
namespace PlanTempus.Application.Features.Employees.Components;
public class EmployeeDetailViewViewComponent : ViewComponent
{
private readonly ILocalizationService _localization;
public EmployeeDetailViewViewComponent(ILocalizationService localization)
{
_localization = localization;
}
public IViewComponentResult Invoke(string key)
{
var employee = EmployeeDetailCatalog.Get(key);
var model = new EmployeeDetailViewViewModel
{
EmployeeKey = employee.Key,
BackText = _localization.Get("employees.detail.back"),
SaveButtonText = _localization.Get("employees.detail.save"),
TabGeneral = _localization.Get("employees.detail.tabs.general"),
TabHours = _localization.Get("employees.detail.tabs.hours"),
TabServices = _localization.Get("employees.detail.tabs.services"),
TabSalary = _localization.Get("employees.detail.tabs.salary"),
TabHR = _localization.Get("employees.detail.tabs.hr"),
TabStats = _localization.Get("employees.detail.tabs.stats")
};
return View(model);
}
}
public class EmployeeDetailViewViewModel
{
public required string EmployeeKey { get; init; }
public required string BackText { get; init; }
public required string SaveButtonText { get; init; }
public required string TabGeneral { get; init; }
public required string TabHours { get; init; }
public required string TabServices { get; init; }
public required string TabSalary { get; init; }
public required string TabHR { get; init; }
public required string TabStats { get; init; }
}