1
0
mirror of https://github.com/chylex/Minecraft-Phantom-Panel.git synced 2024-10-17 03:42:50 +02:00
Minecraft-Phantom-Panel/Web/Phantom.Web/Shared/InstanceStopDialog.razor

84 lines
2.8 KiB
Plaintext

@using Phantom.Common.Data.Replies
@using Phantom.Common.Data.Web.Users
@using Phantom.Utils.Result
@using Phantom.Web.Services.Instances
@using System.ComponentModel.DataAnnotations
@using Phantom.Common.Data.Minecraft
@inherits Phantom.Web.Components.PhantomComponent
@inject IJSRuntime Js;
@inject InstanceManager InstanceManager;
<Form Model="form" OnSubmit="StopInstance">
<Modal Id="@ModalId" TitleText="Stop Instance">
<Body>
<FormSelectInput Id="stop-in-seconds" Label="Stop In..." @bind-Value="form.StopInSeconds">
<option value="0">Immediately</option>
<option value="10">10 Seconds</option>
<option value="30">30 Seconds</option>
<option value="60">1 Minute</option>
<option value="120">2 Minutes</option>
<option value="180">3 Minutes</option>
<option value="240">4 Minutes</option>
<option value="300">5 Minutes</option>
</FormSelectInput>
</Body>
<Footer>
<FormSubmitError />
<FormButtonSubmit Label="Stop Instance" class="btn btn-danger" disabled="@Disabled" />
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
</Footer>
</Modal>
</Form>
@code {
[Parameter, EditorRequired]
public Guid AgentGuid { get; init; }
[Parameter, EditorRequired]
public Guid InstanceGuid { get; init; }
[Parameter, EditorRequired]
public string ModalId { get; init; } = string.Empty;
[Parameter]
public bool Disabled { get; init; }
private readonly StopInstanceFormModel form = new ();
private sealed class StopInstanceFormModel : FormModel {
[Range(minimum: 0, maximum: 300, ErrorMessage = "Stop delay must be between 0 and 300 seconds.")]
public ushort StopInSeconds { get; set; } = 0;
}
private async Task StopInstance(EditContext context) {
await form.SubmitModel.StartSubmitting();
var result = await InstanceManager.StopInstance(await GetAuthenticatedUser(), AgentGuid, InstanceGuid, new MinecraftStopStrategy(form.StopInSeconds), CancellationToken);
switch (result.Variant()) {
case Ok<StopInstanceResult>(StopInstanceResult.StopInitiated):
await Js.InvokeVoidAsync("closeModal", ModalId);
form.SubmitModel.StopSubmitting();
break;
case Ok<StopInstanceResult>(var stopInstanceResult):
form.SubmitModel.StopSubmitting(stopInstanceResult.ToSentence());
break;
case Err<UserInstanceActionFailure>(OfInstanceActionFailure(var failure)):
form.SubmitModel.StopSubmitting(failure.ToSentence());
break;
case Err<UserInstanceActionFailure>(OfUserActionFailure(UserActionFailure.NotAuthorized)):
form.SubmitModel.StopSubmitting("You do not have permission to stop this instance.");
break;
default:
form.SubmitModel.StopSubmitting("Unknown error.");
break;
}
}
}