diff --git a/Components/MessageComponent.razor b/Components/MessageComponent.razor new file mode 100644 index 0000000..63822ec --- /dev/null +++ b/Components/MessageComponent.razor @@ -0,0 +1,34 @@ +@if (Message is not null) { +
+ + + + + @Message + + +
+} + +@code { + [Parameter] + public string? Message { get; set; } + [Parameter] + public AlertType Type { get; set; } = AlertType.Information; + + private string GetAlertTypeClass() => Type switch{ + AlertType.Information => "alert-info", + AlertType.Success => "alert-success", + AlertType.Warning => "alert-warning", + AlertType.Error => "alert-error", + _ => throw new ArgumentOutOfRangeException() + }; + + public enum AlertType { + Information, Success, Warning, Error + } +} diff --git a/Components/Pages/Inspect.razor b/Components/Pages/Inspect.razor new file mode 100644 index 0000000..9cb766d --- /dev/null +++ b/Components/Pages/Inspect.razor @@ -0,0 +1,77 @@ +@page "/inspect" +@using Microsoft.AspNetCore.Authorization +@using JustShortIt.Model +@using Microsoft.Extensions.Caching.Distributed +@attribute [Authorize] + +@inject IDistributedCache Db + +Inspect - Just Short It + +
+
+ @if (Model is null) { +

+ URL not found +

+

+ The given ID does not exist, it may have expired or been deleted. +

+ + } else { +

Inspect

+ +
+
ID
+
@Model.Id
+
URL-Target
+
@Model.Target
+
+ +
+ + + + + } + + + Back to URLs + +
+
+ +@code { + [SupplyParameterFromQuery] + public string? Id { get; set; } + + private string? Message { get; set; } + private MessageComponent.AlertType Type { get; set; } + + private UrlRedirect? Model { get; set; } + + protected override async Task OnInitializedAsync() { + if (Id is not null) { + string? url = await Db.GetStringAsync(Id); + if (url is not null) + Model = new UrlRedirect(Id, url, string.Empty); + } + } + + private async Task Submit_Delete() { + if (Id is null) { + Message = $"Invalid Request: Deletion without Id"; + return; + } + + await Db.RemoveAsync(Id); + + Type = MessageComponent.AlertType.Success; + Message = $"Id '{Id}' successfully deleted."; + return; + } + +} diff --git a/Pages/Inspect.cshtml b/Pages/Inspect.cshtml deleted file mode 100644 index 9730393..0000000 --- a/Pages/Inspect.cshtml +++ /dev/null @@ -1,44 +0,0 @@ -@page -@using JustShortIt.Model -@model JustShortIt.Pages.InspectModel -@{ - ViewData["Title"] = "Inspect"; -} - -
-
- @if (Model.UrlRedirect is null) { - @if (!string.IsNullOrEmpty(Model.Message)) { -
- - - - - @Html.Raw(Model.Message) - - -
- } else { -

URL not found

-

The given ID does not exist, it may have expired or been deleted.

- } - } else { -
-
ID
-
@Model.UrlRedirect.Id
-
URL-Target
-
@Model.UrlRedirect.Target
-
- -
- - -
- } - Back to URLs -
-
diff --git a/Pages/Inspect.cshtml.cs b/Pages/Inspect.cshtml.cs deleted file mode 100644 index 1c6950c..0000000 --- a/Pages/Inspect.cshtml.cs +++ /dev/null @@ -1,46 +0,0 @@ -using JustShortIt.Model; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Caching.Distributed; - -namespace JustShortIt.Pages; - -[Authorize] -public class InspectModel : PageModel { - [BindProperty(Name = "id", SupportsGet = true)] - public string? Id { get; set; } = string.Empty; - [BindProperty(Name="message")] - public string? Message { get; set; } - - public UrlRedirect? UrlRedirect { get; set; } - - private IDistributedCache Db { get; } - - public InspectModel(IDistributedCache db) { - Db = db; - } - - public async Task OnPostAsync() { - if (Id == null) return await OnGet(null, $"Delete request without ID, aborted."); - - await Db.RemoveAsync(Id); - - return await OnGet(null, $"ID '{Id}' successfully deleted."); - } - - public async Task OnGet(string? id, string? message) { - if (id is null && message is null) return RedirectToPage("Urls"); - - Id = id; - Message = message; - - if (Id is not null) { - string? url = await Db.GetStringAsync(Id); - if (url is not null) - UrlRedirect = new UrlRedirect(Id, url, string.Empty); - } - - return Page(); - } -} \ No newline at end of file diff --git a/Pages/Urls.cshtml.cs b/Pages/Urls.cshtml.cs index 5ad7bb5..05b129a 100644 --- a/Pages/Urls.cshtml.cs +++ b/Pages/Urls.cshtml.cs @@ -1,11 +1,10 @@ -using System.Text.Encodings.Web; using JustShortIt.Model; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using System.Text.RegularExpressions; using System.Web; -using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Caching.Distributed; namespace JustShortIt.Pages; @@ -42,7 +41,7 @@ public class UrlsModel : PageModel { return Page(); } - return RedirectToPage("Inspect", new { Id = id }); + return LocalRedirect(QueryHelpers.AddQueryString("~/inspect", "Id", id)); } public async Task OnPostNewAsync() {