From dc40f4ebe4dbd94942c2d7a8e0ba11f50fa405b1 Mon Sep 17 00:00:00 2001 From: Andrei Tudor Date: Mon, 26 May 2025 20:25:27 +0300 Subject: [PATCH] Updated the UI of the application --- WebUI/Components/Pages/Plugins/AddLocal.razor | 71 ++++++++--------- WebUI/Components/Pages/Settings.razor | 59 +++++++------- WebUI/Components/Shared/CenteredCard.razor | 14 ++++ WebUI/Components/Shared/ModernCheckbox.razor | 28 +++++++ .../Shared/ModernFileUploader.razor | 78 +++++++++++++++++++ WebUI/Components/Shared/ModernLabel.razor | 7 ++ WebUI/Components/Shared/RoundedTextBox.razor | 24 ++++++ WebUI/WebUI.csproj | 4 - .../ModernFileUploader/modernFileUploader.css | 3 + .../ModernFileUploader/modernFileUploader.js | 3 + 10 files changed, 220 insertions(+), 71 deletions(-) create mode 100644 WebUI/Components/Shared/CenteredCard.razor create mode 100644 WebUI/Components/Shared/ModernCheckbox.razor create mode 100644 WebUI/Components/Shared/ModernFileUploader.razor create mode 100644 WebUI/Components/Shared/ModernLabel.razor create mode 100644 WebUI/Components/Shared/RoundedTextBox.razor create mode 100644 WebUI/wwwroot/Components/Shared/ModernFileUploader/modernFileUploader.css create mode 100644 WebUI/wwwroot/Components/Shared/ModernFileUploader/modernFileUploader.js diff --git a/WebUI/Components/Pages/Plugins/AddLocal.razor b/WebUI/Components/Pages/Plugins/AddLocal.razor index 21c2250..7242488 100644 --- a/WebUI/Components/Pages/Plugins/AddLocal.razor +++ b/WebUI/Components/Pages/Plugins/AddLocal.razor @@ -7,6 +7,7 @@ @using DiscordBotCore.PluginManagement.Models @using WebUI.Models @using WebUI.Services +@using WebUI.Components.Shared @inject NavigationManager Navigation @inject NotificationService NotificationService @@ -17,58 +18,58 @@ @rendermode InteractiveServer -

Upload Plugin

+ + + + - - - +
+ + +
-
- - -
+
+ + +
-
- - - @if (!IsValidVersion) - { -
Version must be in format X.X.X
- } -
+
+ +
-
- Enable Plugin -
+
+ + @if (_message is not null) + { +

@_message

+ } -
- - - @if (selectedFileName != null) - { -
Selected: @selectedFileName
- } -
+
- -
+ +
+
@code { private PluginUploadModel pluginModel = new(); private IBrowserFile? selectedFile; - private string? selectedFileName; + + private List allowedFileTypes { get; set; } = new List { ".dll"}; + + private string? _message; private bool IsValidVersion => System.Text.RegularExpressions.Regex.IsMatch(pluginModel.Version ?? "", @"^\d+\.\d+\.\d+$"); - private async Task HandleFileSelected(InputFileChangeEventArgs e) + private async Task HandleUploadedFile(IBrowserFile file) { - selectedFile = e.File; - selectedFileName = selectedFile.Name; + var buffer = new byte[file.Size]; + await file.OpenReadStream().ReadAsync(buffer); + _message = $"Uploaded file: {file.Name} ({file.Size} bytes)"; } private async Task HandleValidSubmit() { - if (!IsValidVersion || selectedFile is null || string.IsNullOrEmpty(selectedFileName)) + if (!IsValidVersion || selectedFile is null || string.IsNullOrEmpty(selectedFile.Name)) { NotificationService.Notify("Invalid field values. Please check the form.", NotificationType.Error); return; @@ -83,7 +84,7 @@ return; } - string filePath = Path.Combine(pluginsFolder, selectedFileName); + string filePath = Path.Combine(pluginsFolder, selectedFile.Name); await using var stream = selectedFile.OpenReadStream(maxAllowedSize: 10 * 1024 * 1024); await using var fileStream = File.Create(filePath); diff --git a/WebUI/Components/Pages/Settings.razor b/WebUI/Components/Pages/Settings.razor index 55d1383..b414e88 100644 --- a/WebUI/Components/Pages/Settings.razor +++ b/WebUI/Components/Pages/Settings.razor @@ -2,46 +2,41 @@ @using System.ComponentModel.DataAnnotations @using DiscordBotCore.Configuration @using DiscordBotCore.Logging +@using WebUI.Components.Shared @inject NavigationManager Navigation @rendermode InteractiveServer @if (_settingsViewModel is not null) { -
-
-
-

Bot Settings

+ + + + - - - - -
- - -
- -
- - -
- -
- - -
- - -
+
+ +
-
-
+ +
+ + +
+ +
+ + +
+ + + + } @code { diff --git a/WebUI/Components/Shared/CenteredCard.razor b/WebUI/Components/Shared/CenteredCard.razor new file mode 100644 index 0000000..c93cf73 --- /dev/null +++ b/WebUI/Components/Shared/CenteredCard.razor @@ -0,0 +1,14 @@ +
+
+
+

@Title

+ @ChildContent +
+
+
+ +@code { + + [Parameter] public string Title { get; set; } = string.Empty; + [Parameter] public RenderFragment ChildContent { get; set; } = default!; +} \ No newline at end of file diff --git a/WebUI/Components/Shared/ModernCheckbox.razor b/WebUI/Components/Shared/ModernCheckbox.razor new file mode 100644 index 0000000..392436c --- /dev/null +++ b/WebUI/Components/Shared/ModernCheckbox.razor @@ -0,0 +1,28 @@ +
+ + + +
+ +@code { + [Parameter] public string Label { get; set; } = string.Empty; + [Parameter] public bool Checked { get; set; } + [Parameter] public EventCallback CheckedChanged { get; set; } + + private string CheckboxId { get; } = $"checkbox_{Guid.NewGuid().ToString("N")}"; + + private async Task OnChange(ChangeEventArgs e) + { + if (e.Value is bool value) + { + Checked = value; + await CheckedChanged.InvokeAsync(value); + } + } +} \ No newline at end of file diff --git a/WebUI/Components/Shared/ModernFileUploader.razor b/WebUI/Components/Shared/ModernFileUploader.razor new file mode 100644 index 0000000..9bf66c9 --- /dev/null +++ b/WebUI/Components/Shared/ModernFileUploader.razor @@ -0,0 +1,78 @@ +@inject IJSRuntime JS + + + +
+ @if (string.IsNullOrEmpty(SelectedFileName)) + { +

Click to upload a file

+ } + @if (!string.IsNullOrEmpty(SelectedFileName)) + { +

Selected: @SelectedFileName

+ } +
+ +