Feature-based folder structure

1. Created feature-based folder structure - Components now organized by domain feature
  2. Moved all components - 20+ files moved to new locations
  3. Updated _Imports.razor - Added all new namespace paths for global component access
  4. Updated CustomThemes.cs namespace - Changed from WebApp.Components.Layout to WebApp.Components.Shared.Layout
  5. Removed old using directives - Cleaned up Login.razor and Routes.razor
  6. Removed empty directories - Cleaned up old folder structure
This commit is contained in:
2025-12-03 22:04:23 -05:00
parent bd04483bed
commit 2d5d075879
38 changed files with 13 additions and 4 deletions
@@ -0,0 +1,38 @@
@if (Title != null)
{
<MudText Typo="@TitleTypo">@Title</MudText>
}
<MudToggleGroup T="Student"
SelectionMode="SelectionMode.ToggleSelection"
Value="@SelectedCaptain"
ValueChanged="@OnSelectedCaptainChanged"
CheckMark>
@foreach (var student in Students.OrderBy(e => e.FirstName))
{
<MudToggleItem Value="@student" Text="@student.Name" />
}
</MudToggleGroup>
@code {
[Parameter]
public IEnumerable<Student> Students { get; set; } = [];
[Parameter]
public Student? SelectedCaptain { get; set; }
[Parameter]
public EventCallback<Student?> SelectedCaptainChanged { get; set; }
[Parameter]
public string? Title { get; set; } = "Captain";
[Parameter]
public Typo TitleTypo { get; set; } = Typo.body1;
private async Task OnSelectedCaptainChanged(Student? value)
{
SelectedCaptain = value;
await SelectedCaptainChanged.InvokeAsync(value);
}
}
@@ -0,0 +1,18 @@
<MudSelect
T="Team"
MultiSelection="true"
@bind-SelectedValues="@SelectedTeams"
ToStringFunc="e => e.ToString()"
Label="@Label">
@foreach (var evt in Teams.OrderBy(e => e.ToString()))
{
<MudSelectItem T="Team" Value="@evt">@evt.ToString()</MudSelectItem>
}
</MudSelect>
@code {
[Parameter] public Team[]? Teams { get; set; }
[Parameter] public required IEnumerable<Team> SelectedTeams { get; set; }
[Parameter] public string Label { get; set; } = "Teams";
}
@@ -0,0 +1,27 @@
@using WebApp.Models
@foreach (var student in
Team.Students
.OrderBy(e =>
e.EventRankings
.Find(er => er.EventDefinition == Team.Event)?.Rank ?? 10)
.ThenBy(s => s.Grade + s.TsaYear))
{
var eventRank =
student.EventRankings
.Find(e => e.EventDefinition == Team.Event)?.Rank;
var color = AppIcons.RankedEventColor(eventRank ?? 0);
var captain = Team.Captain != null && Team.Captain.Equals(student);
<MudPaper Class="d-inline-flex pa-2 mx-3 my-1" Style="@($"background:{color};")">
@student.FirstName
@if (captain)
{
<span> (Cpt)</span>
}
</MudPaper>
}
@code {
[Parameter]
public Team Team { get; set; }
}
@@ -0,0 +1,49 @@
@if (Title != null)
{
<MudText Typo="Typo.h4">@Title</MudText>
}
<MudToggleGroup T="Team"
SelectionMode="SelectionMode.MultiSelection"
Values="@SelectedTeams"
ValuesChanged="@OnSelectedTeamsChanged"
Vertical="true"
CheckMark>
@foreach (var team in Teams.OrderBy(e => e.Event.Name))
{
<MudToggleItem Value="@team" Style="font-size: .75rem;">
<MudTooltip Text="@team.StudentsFirstNames">
<div class="d-flex align-center justify-space-between flex-wrap">
<MudText Class="ellipsis">@team.ToString()</MudText>
@if (ShowEventAttributes)
{
<EventAttributes EventDefinition="@team.Event"></EventAttributes>
}
</div>
</MudTooltip>
</MudToggleItem>
}
</MudToggleGroup>
@code {
[Parameter]
public IEnumerable<Team> Teams { get; set; } = [];
[Parameter]
public IEnumerable<Team> SelectedTeams { get; set; } = [];
[Parameter]
public EventCallback<IEnumerable<Team>> SelectedTeamsChanged { get; set; }
[Parameter]
public string? Title { get; set; }
[Parameter]
public bool ShowEventAttributes { get; set; } = true;
private async Task OnSelectedTeamsChanged(IEnumerable<Team> value)
{
SelectedTeams = value;
await SelectedTeamsChanged.InvokeAsync(value);
}
}