Files
Servers/MoonlightServers.Frontend/UI/Components/Servers/CreatePartials/Variables.razor

90 lines
3.0 KiB
Plaintext

@using MoonCore.Blazor.FlyonUi.Components
@using MoonlightServers.Shared.Http.Requests.Admin.Servers
@using MoonCore.Helpers
@using MoonCore.Models
@using MoonlightServers.Frontend.UI.Views.Admin.All
@using MoonlightServers.Shared.Http.Requests.Admin.ServerVariables
@using MoonlightServers.Shared.Http.Responses.Admin.Stars
@using MoonlightServers.Shared.Http.Responses.Admin.StarVariables
@inject HttpApiClient ApiClient
<LazyLoader Load="Load">
<div class="grid grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6">
@foreach (var variable in StarVariables)
{
// Load value of default
var requestVar = Request.Variables.FirstOrDefault(x => x.Key == variable.Key);
var value = requestVar != null
? requestVar.Value
: variable.DefaultValue;
<div class="sm:col-span-2">
<label class="block text-sm font-medium leading-6 text-base-content">
@variable.Name
</label>
<div class="mt-2">
<input type="text"
class="input placeholder-base-content/50 w-full"
value="@value"
placeholder="@variable.DefaultValue"
@onchange="@(args => UpdateValue(variable, args))"/>
</div>
<p class="mt-1 text-sm leading-6 text-base-content/60">
@variable.Description
</p>
</div>
}
</div>
</LazyLoader>
@code
{
[Parameter] public CreateServerRequest Request { get; set; }
[Parameter] public Create Parent { get; set; }
private StarVariableDetailResponse[] StarVariables;
private async Task Load(LazyLoader _)
{
if (Parent.Star == null)
{
StarVariables = [];
return;
}
StarVariables = await PagedData<StarVariableDetailResponse>.All(async (page, pageSize) =>
await ApiClient.GetJson<PagedData<StarVariableDetailResponse>>(
$"api/admin/servers/stars/{Parent.Star.Id}/variables?page={page}&pageSize={pageSize}"
)
);
}
private async Task UpdateValue(StarVariableDetailResponse starVariable, ChangeEventArgs args)
{
var value = args.Value?.ToString() ?? "";
// Remove variable from request when set to its default value
if (value == starVariable.DefaultValue && Request.Variables.Any(x => x.Key == starVariable.Key))
Request.Variables.RemoveAll(x => x.Key == starVariable.Key);
else
{
var serverVar = Request.Variables
.FirstOrDefault(x => x.Key == starVariable.Key);
if (serverVar == null)
{
serverVar = new CreateServerVariableRequest()
{
Key = starVariable.Key
};
Request.Variables.Add(serverVar);
}
serverVar.Value = value;
}
await InvokeAsync(StateHasChanged);
}
}