🎉 Added files

This commit is contained in:
2024-12-06 10:26:27 +01:00
commit 953f596db1
29 changed files with 1288 additions and 0 deletions

View File

@ -0,0 +1,63 @@
@using Microsoft.FluentUI.AspNetCore.Components.Extensions
@typeparam TEnum where TEnum : struct, Enum
<FluentSelect
TOption="Option<int>"
Items="_enumOptions"
Label="@Label"
OptionText="@(i => i.Text)"
OptionValue="@(i => i.Value.ToString())"
OptionSelected="@(i => i.Selected)"
@bind-Value="_selectedValue"
Placeholder="@Placeholder"
AdditionalAttributes="@AdditionalAttributes"
/>
@code {
[Parameter] public TEnum? EnumSelectedValue { get; set; }
[Parameter] public EventCallback<TEnum?> EnumSelectedValueChanged { get; set; }
[Parameter] public TEnum[] ExcludeEnumItems { get; set; } = [];
[Parameter] public string? Placeholder { get; set; }
[Parameter] public string? Label { get; set; }
[Parameter(CaptureUnmatchedValues = true)]
public Dictionary<string, object> AdditionalAttributes { get; set; } = new();
private List<Option<int>> _enumOptions = [];
private string? _selectedValue
{
get { return _enumOptions.FirstOrDefault(e => e.Value.Equals(GetEnumInt(EnumSelectedValue)))?.Value.ToString(); }
set
{
if (value is null || !Enum.TryParse<TEnum>(value, out var result)) return;
EnumSelectedValue = result;
EnumSelectedValueChanged.InvokeAsync(result);
}
}
protected override void OnInitialized()
{
if (!typeof(TEnum).IsEnum)
{
throw new InvalidOperationException($"{typeof(TEnum).Name} is not an enum type");
}
}
protected override void OnParametersSet()
{
_enumOptions = Enum.GetValues(typeof(TEnum))
.Cast<TEnum>()
.Where(e => !ExcludeEnumItems.Contains(e))
.Select(e => new Option<int>
{
Value = GetEnumInt(e).GetValueOrDefault(),
Text = e.GetDescription(false),
Selected = e.Equals(EnumSelectedValue)
})
.ToList();
}
private static int? GetEnumInt(TEnum? value)
{
if (!typeof(TEnum).IsEnum || value is null)
return null;
return (int)Convert.ChangeType(value, typeof(TEnum));
}
}

View File

@ -0,0 +1,12 @@
<AuthorizeView>
<Authorized>
<a style="padding: 2em; color: aliceblue;" href="Identity/Account/Manage">Hello,
@context.User.Identity?.Name</a>
<form method="post" action="Identity/Account/Logout">
<FluentButton Type="ButtonType.Submit" Appearance="Appearance.Lightweight">Log out</FluentButton>
</form>
</Authorized>
<NotAuthorized>
<a href="Identity/Account/Login">Log in</a>
</NotAuthorized>
</AuthorizeView>

View File

@ -0,0 +1,23 @@
@inherits LayoutComponentBase
<PageTitle>The-Metaverse-Engine</PageTitle>
<FluentMainLayout NavMenuTitle="Navigation menu">
<Header>
<h2 style="margin: 0.4em;">The-Metaverse-Engine</h2>
<FluentSpacer />
<LoginDisplay />
</Header>
<Body>
<FluentMessageBarProvider Section="MESSAGES_TOP" />
@Body
</Body>
<NavMenuContent>
<NavMenu />
</NavMenuContent>
</FluentMainLayout>
<FluentToastProvider MaxToastCount="10" />
<FluentDialogProvider />

View File

View File

@ -0,0 +1,8 @@
<FluentNavLink Icon="@(new Icons.Regular.Size24.Home())" Href="/" Match="NavLinkMatch.All">Home</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="apikeys">ApiKeys</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="heats">Heats</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="challenges">Challenges</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="final">Final</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="players">Players</FluentNavLink>
<FluentNavLink Icon="@(new Icons.Regular.Size24.VehicleCarCollision())" Href="dangerzone">Danger zone</FluentNavLink>

View File

@ -0,0 +1,5 @@
.navmenu {
background: var(--neutral-layer-3);
display: flex;
padding: 10px;
}

View File

@ -0,0 +1,28 @@
@using Microsoft.AspNetCore.Identity
@inject SignInManager<AppUser> SignInManager
@inject UserManager<AppUser> UserManager
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello
@User.Identity?.Name!</a>
</li>
<li class="nav-item">
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="/" method="post">
<button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
</li>
}
</ul>