diff --git a/Wave/Components/Account/Pages/Manage/Partials/LinksPartial.razor b/Wave/Components/Account/Pages/Manage/Partials/LinksPartial.razor index 3bdba4d..afafaa9 100644 --- a/Wave/Components/Account/Pages/Manage/Partials/LinksPartial.razor +++ b/Wave/Components/Account/Pages/Manage/Partials/LinksPartial.razor @@ -1,20 +1,35 @@ @using Wave.Data @using System.ComponentModel.DataAnnotations @using Microsoft.AspNetCore.Identity +@using Wave.Utilities @inject UserManager UserManager @inject NavigationManager Navigation @inject IStringLocalizer Localizer +@inject IMessageDisplay Message + + + + + + + + + - - - -
- - -
-
-
+@code { + private static string ModalId => "AddLinkDialog"; -@code { [Parameter] public required ApplicationUser User { get; set; } + + // Create + [SupplyParameterFromForm(FormName = "add-user-link", Name = "link-url")] + private string Url { get; set; } = string.Empty; - [SupplyParameterFromForm(FormName = "user-links")] - private InputModel Model { get; set; } = new(); - private EditContext Context { get; set; } = null!; - private ValidationMessageStore Validation { get; set; } = null!; - [SupplyParameterFromForm(Name = "LinkId")] + // Delete + [SupplyParameterFromForm(Name = "link-id")] private int? LinkId { get; set; } + + private async Task Add() { + if (string.IsNullOrWhiteSpace(Url)) { + Message.ShowError("Url is required."); + return; + } + if (Url.Length > 1024) { + Message.ShowError("Url is too long."); + return; + } - protected override void OnInitialized() { - Context = new EditContext(Model); - Validation = new ValidationMessageStore(Context); - } - - private async Task OnValidSubmit() { - var link = new UserLink { UrlString = Model.Url }; - + var link = new UserLink { UrlString = Url }; if (!link.Validate()) { - Validation.Add(() => Model.Url, "Url is invalid."); - Context.NotifyValidationStateChanged(); + Message.ShowError("Url is invalid."); return; } link.UrlString = link.Url.AbsoluteUri; User.Links.Add(link); await UserManager.UpdateAsync(User); - Model = new InputModel(); + Url = string.Empty; } - private sealed class InputModel { - [Url, Required(AllowEmptyStrings = false), MaxLength(1024)] - public string Url { get; set; } = string.Empty; - } + private async Task Delete() { + var link = User.Links.FirstOrDefault(l => l.Id == LinkId); + if (link is null) { + Message.ShowError("Link ID not found."); + return; + } + User.Links.Remove(link); + await UserManager.UpdateAsync(User); + } } diff --git a/Wave/Resources/Components/Account/Pages/Manage/Index.de-DE.resx b/Wave/Resources/Components/Account/Pages/Manage/Index.de-DE.resx index b6f1b9a..52de7f1 100644 --- a/Wave/Resources/Components/Account/Pages/Manage/Index.de-DE.resx +++ b/Wave/Resources/Components/Account/Pages/Manage/Index.de-DE.resx @@ -201,4 +201,7 @@ Ich koche seit dem jungen Alter von 7... +49 555 5555 555 + + Link Hinzufügen + \ No newline at end of file diff --git a/Wave/Resources/Components/Account/Pages/Manage/Index.resx b/Wave/Resources/Components/Account/Pages/Manage/Index.resx index 1240b57..00db5be 100644 --- a/Wave/Resources/Components/Account/Pages/Manage/Index.resx +++ b/Wave/Resources/Components/Account/Pages/Manage/Index.resx @@ -201,4 +201,7 @@ I started cooking at the young age of 7... Error updated contact information + + Add Link + \ No newline at end of file