Added ability to add alerts onto the page via controller

This commit is contained in:
Pat Hartl 2023-01-16 02:38:13 -06:00
parent 65f43577b2
commit f2dfc90de8
3 changed files with 83 additions and 1 deletions

View file

@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
namespace LANCommander.Controllers
{
public class BaseController : Controller
{
public void Alert(string message, string type = "info", bool dismissable = true)
{
List<AlertViewModel> alerts;
try
{
alerts = JsonSerializer.Deserialize<List<AlertViewModel>>((string)TempData["Alerts"]);
}
catch
{
alerts = new List<AlertViewModel>();
}
alerts.Add(new AlertViewModel()
{
Message = message,
Type = type,
Dismissable = dismissable
});
TempData["Alerts"] = JsonSerializer.Serialize(alerts);
}
}
}

View file

@ -0,0 +1,6 @@
public class AlertViewModel
{
public string Message { get; set; }
public bool Dismissable { get; set; }
public string Type { get; set; }
}

View file

@ -1,4 +1,5 @@
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor _HttpContext
@using System.Text.Json
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor _HttpContext
@{
_HttpContext.HttpContext.Response.Headers["Cache-Control"] = "no-store";
}
@ -93,6 +94,31 @@
</div>
</div>
<div class="alert-container">
@if (TempData["Alerts"] != null)
{
try
{
foreach (var alert in JsonSerializer.Deserialize<List<AlertViewModel>>((string)TempData["Alerts"]))
{
<div class="alert alert-important alert-@alert.Type @(alert.Dismissable ? "alert-dismissable" : "")" role="alert">
<div class="d-flex">
<div>
@alert.Message
</div>
</div>
@if (alert.Dismissable)
{
<a class="btn-close btn-close-white" data-bs-dismiss="alert" aria-label="close"></a>
}
</div>
}
}
catch { }
}
</div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/selectize.js/js/selectize.min.js"></script>
<script src="~/lib/tabler/core/dist/js/tabler.min.js"></script>
@ -100,6 +126,25 @@
<script src="~/js/Select.js"></script>
<script src="~/_framework/blazor.server.js"></script>
<style>
.alert-container {
position: fixed;
top: 2rem;
left: 50%;
transform: translateX(-50%);
min-width: 400px;
z-index: 2;
}
.alert-dismissable .btn-close {
position: absolute;
top: 0;
right: 0;
z-index: 2;
padding: 1.25rem 1rem;
}
</style>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>