@inject MesaFabApprovalAuthStateProvider authStateProvider @inject NavigationManager navigationManager @inject IPCRBService pcrbService @inject ISnackbar snackbar <MudDialog> <DialogContent> <MudPaper Class="m-2 p-2"> <MudForm @bind-Errors="@errors"> <MudTextField T="string" Label="File Name" Disabled Immediate @bind-Value="@fileName" @bind-Text="@fileName" AutoGrow /> <MudFileUpload T="IBrowserFile" FilesChanged="AddFile" Required Disabled="@(!string.IsNullOrWhiteSpace(fileName))" RequiredError="You must select a file"> <ActivatorContent> <MudButton Variant="Variant.Filled" Color="Color.Tertiary" style="margin: auto;" StartIcon="@Icons.Material.Filled.AttachFile"> @if (addFileInProcess) { <MudProgressCircular Class="m-1" Size="Size.Small" Indeterminate="true" /> <MudText>Processing</MudText> } else { <MudText>Add File</MudText> } </MudButton> </ActivatorContent> </MudFileUpload> </MudForm> </MudPaper> </DialogContent> <DialogActions> <MudButton Variant="Variant.Filled" Color="Color.Tertiary" Class="m1-auto" OnClick=Submit> @if (processing) { <MudProgressCircular Class="m-1" Size="Size.Small" Indeterminate="true" /> <MudText>Processing</MudText> } else { <MudText>Submit</MudText> } </MudButton> <MudButton Variant="Variant.Filled" Class="grey text-black m1-auto" OnClick=Cancel> Cancel </MudButton> </DialogActions> </MudDialog> @code { [CascadingParameter] MudDialogInstance MudDialog { get; set; } [Parameter] public int planNumber { get; set; } = 0; [Parameter] public int step { get; set; } = 0; private string[] errors = { }; private string fileName = ""; private IBrowserFile? file = null; private bool addFileInProcess = false; private bool processing = false; protected override async Task OnParametersSetAsync() { if (planNumber <= 0) { snackbar.Add($"{planNumber} is not a valid PCRB plan#", Severity.Error); MudDialog.Close(DialogResult.Cancel()); } if (step <= 0) { snackbar.Add($"{step} is not a valid PCRB stage#", Severity.Error); MudDialog.Close(DialogResult.Cancel()); } if (authStateProvider.CurrentUser is null) { await authStateProvider.Logout(); navigationManager.NavigateTo("login"); } } private void AddFile(IBrowserFile newFile) { addFileInProcess = true; file = newFile; fileName = newFile.Name; addFileInProcess = false; } private async Task Submit() { processing = true; try { if (authStateProvider.CurrentUser is null) { await authStateProvider.Logout(); navigationManager.NavigateTo("login"); return; } if (string.IsNullOrWhiteSpace(fileName)) throw new Exception("file name missing"); if (file is null) throw new Exception("file is missing"); PCRBAttachment attachment = new() { Step = step, UploadDateTime = DateTime.Now, UploadedByID = authStateProvider.CurrentUser.UserID, PlanNumber = planNumber, File = file, FileName = fileName }; await pcrbService.UploadAttachment(attachment); processing = false; MudDialog.Close(DialogResult.Ok(attachment)); } catch (Exception ex) { snackbar.Add($"Unable to save document, because {ex.Message}", Severity.Error); processing = false; } } private void Cancel() { MudDialog.Close(DialogResult.Cancel()); } }