using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; using Phantom.Server.Database.Entities; using Phantom.Server.Web.Base; using Phantom.Server.Web.Components.Forms; using Phantom.Server.Web.Identity.Data; namespace Phantom.Server.Web.Shared; public abstract class UserEditDialogBase : PhantomComponent { [Inject] public IJSRuntime Js { get; set; } = null!; [Parameter, EditorRequired] public string ModalId { get; set; } = string.Empty; [Parameter] public EventCallback<UserEntity> UserModified { get; set; } protected readonly FormButtonSubmit.SubmitModel SubmitModel = new(); private UserEntity? EditedUser { get; set; } = null; protected string EditedUserName { get; private set; } = string.Empty; internal async Task Show(UserEntity user) { EditedUser = user; EditedUserName = user.Name; await BeforeShown(user); StateHasChanged(); await Js.InvokeVoidAsync("showModal", ModalId); } protected virtual Task BeforeShown(UserEntity user) { return Task.CompletedTask; } protected void OnClosed() { EditedUser = null; } protected async Task Submit() { await SubmitModel.StartSubmitting(); if (!await CheckPermission(Permission.EditUsers)) { SubmitModel.StopSubmitting("You do not have permission to edit users."); } else if (EditedUser == null) { SubmitModel.StopSubmitting("Invalid user."); } else { await DoEdit(EditedUser); } } protected abstract Task DoEdit(UserEntity user); protected async Task OnEditSuccess() { await UserModified.InvokeAsync(EditedUser); await Js.InvokeVoidAsync("closeModal", ModalId); SubmitModel.StopSubmitting(); OnClosed(); } protected void OnEditFailure(string message) { SubmitModel.StopSubmitting(message); } }