From 6a781990e49458c4d01aba4d4adb05a487ceac49 Mon Sep 17 00:00:00 2001 From: Leon Hoppe Date: Sun, 6 Oct 2024 12:48:05 +0200 Subject: [PATCH] Started creating generated admin page --- .../Attributes/Members/AdminBoldAttribute.cs | 4 - .../Generators/IAdminPropertyGenerator.cs | 1 - .../Implementation/AdminPropertyGenerator.cs | 9 -- .../Models/AdminPageProperty.cs | 1 - .../Pages/Administration/AdminPageList.razor | 114 ++++++++++++++++++ .../Administration/AdminPageList.razor.css | 26 ++++ 6 files changed, 140 insertions(+), 15 deletions(-) delete mode 100644 src/HopFrame.Web.Admin/Attributes/Members/AdminBoldAttribute.cs create mode 100644 src/HopFrame.Web/Pages/Administration/AdminPageList.razor create mode 100644 src/HopFrame.Web/Pages/Administration/AdminPageList.razor.css diff --git a/src/HopFrame.Web.Admin/Attributes/Members/AdminBoldAttribute.cs b/src/HopFrame.Web.Admin/Attributes/Members/AdminBoldAttribute.cs deleted file mode 100644 index 68311b2..0000000 --- a/src/HopFrame.Web.Admin/Attributes/Members/AdminBoldAttribute.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace HopFrame.Web.Admin.Attributes.Members; - -[AttributeUsage(AttributeTargets.Property)] -public sealed class AdminBoldAttribute : Attribute; diff --git a/src/HopFrame.Web.Admin/Generators/IAdminPropertyGenerator.cs b/src/HopFrame.Web.Admin/Generators/IAdminPropertyGenerator.cs index d9349af..d32fe15 100644 --- a/src/HopFrame.Web.Admin/Generators/IAdminPropertyGenerator.cs +++ b/src/HopFrame.Web.Admin/Generators/IAdminPropertyGenerator.cs @@ -6,7 +6,6 @@ public interface IAdminPropertyGenerator { IAdminPropertyGenerator Editable(bool editable); IAdminPropertyGenerator DisplayValueWhileEditing(bool display); IAdminPropertyGenerator DisplayInListing(bool display = true); - IAdminPropertyGenerator Bold(bool isBold = true); IAdminPropertyGenerator Ignore(bool ignore = true); IAdminPropertyGenerator Generated(bool generated = true); diff --git a/src/HopFrame.Web.Admin/Generators/Implementation/AdminPropertyGenerator.cs b/src/HopFrame.Web.Admin/Generators/Implementation/AdminPropertyGenerator.cs index ca756a0..68fea2b 100644 --- a/src/HopFrame.Web.Admin/Generators/Implementation/AdminPropertyGenerator.cs +++ b/src/HopFrame.Web.Admin/Generators/Implementation/AdminPropertyGenerator.cs @@ -35,11 +35,6 @@ internal sealed class AdminPropertyGenerator(string name, Type type) : IAdminPro return this; } - public IAdminPropertyGenerator Bold(bool isBold = true) { - _property.Bold = isBold; - return this; - } - public IAdminPropertyGenerator Ignore(bool ignore = false) { _property.Ignore = ignore; return this; @@ -73,7 +68,6 @@ internal sealed class AdminPropertyGenerator(string name, Type type) : IAdminPro public void ApplyConfigurationFromAttributes(AdminPageGenerator pageGenerator, object[] attributes, PropertyInfo property) { if (attributes.Any(a => a is KeyAttribute)) { pageGenerator.Page.DefaultSortPropertyName = property.Name; - Bold(); Editable(false); } @@ -82,9 +76,6 @@ internal sealed class AdminPropertyGenerator(string name, Type type) : IAdminPro if (attributes.Any(a => a is AdminUneditableAttribute)) Editable(false); - - if (attributes.Any(a => a is AdminBoldAttribute)) - Bold(); if (attributes.Any(a => a is AdminIgnoreAttribute)) { var attribute = attributes.Single(a => a is AdminIgnoreAttribute) as AdminIgnoreAttribute; diff --git a/src/HopFrame.Web.Admin/Models/AdminPageProperty.cs b/src/HopFrame.Web.Admin/Models/AdminPageProperty.cs index 906618d..eeaf3a2 100644 --- a/src/HopFrame.Web.Admin/Models/AdminPageProperty.cs +++ b/src/HopFrame.Web.Admin/Models/AdminPageProperty.cs @@ -13,7 +13,6 @@ public sealed class AdminPageProperty { public bool Editable { get; set; } = true; public bool EditDisplayValue { get; set; } = true; public bool Generated { get; set; } - public bool Bold { get; set; } public bool Ignore { get; set; } [JsonIgnore] public Type Type { get; set; } diff --git a/src/HopFrame.Web/Pages/Administration/AdminPageList.razor b/src/HopFrame.Web/Pages/Administration/AdminPageList.razor new file mode 100644 index 0000000..af1bbd4 --- /dev/null +++ b/src/HopFrame.Web/Pages/Administration/AdminPageList.razor @@ -0,0 +1,114 @@ +@page "/administration/{url}" +@layout AdminLayout +@rendermode InteractiveServer + +@using System.ComponentModel +@using BlazorStrap +@using Microsoft.AspNetCore.Components.Web +@using HopFrame.Web.Admin.Models +@using HopFrame.Web.Admin.Providers +@using HopFrame.Web.Pages.Administration.Layout +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using HopFrame.Web.Components.Administration +@using BlazorStrap.V5 +@using HopFrame.Web.Components + +@_pageData.Title + + +
+

+ @_pageData.Title administration + + + +

+ + + + Add Group + +
+ + + + + @foreach (var prop in GetListingProperties()) { + + @if (prop.Sortable) { + @prop.DisplayName + @if (_currentSortProperty == prop.Name) { + + } + } + else { + @prop.DisplayName + } + + } + + + + + + + + +@inject IAdminPagesProvider Pages + +@code { + [Parameter] + public string Url { get; set; } + + private AdminPage _pageData; + + private string _currentSortProperty; + private ListSortDirection _currentSortDirection; + private DateTime _lastSearch; + + protected override void OnInitialized() { + _pageData = Pages.LoadAdminPage(Url); + + _currentSortProperty = _pageData.DefaultSortPropertyName; + _currentSortDirection = _pageData.DefaultSortDirection; + } + + private IList GetListingProperties() { + return _pageData.Properties + .Where(p => p.Ignore == false) + .Where(p => p.DisplayInListing) + .ToList(); + } + + private void Reload() { + + } + + private void OrderBy(string property, bool changeDir = true) { + if (_currentSortProperty == property && changeDir) + _currentSortDirection = (ListSortDirection)(((int)_currentSortDirection + 1) % 2); + if (_currentSortProperty != property) + _currentSortDirection = ListSortDirection.Ascending; + + //TODO: Handle ordering + + _currentSortProperty = property; + } + + private void TriggerSearch(ChangeEventArgs e) { + var search = ((string)e.Value)?.Trim(); + Search(search); + } + + private async void Search(string search) { + _lastSearch = DateTime.Now; + await Task.Delay(500); + var timeSinceLastKeyPress = DateTime.Now - _lastSearch; + if (timeSinceLastKeyPress < TimeSpan.FromMilliseconds(500)) return; + + //TODO: Handle searching + Console.WriteLine(search); + } +} \ No newline at end of file diff --git a/src/HopFrame.Web/Pages/Administration/AdminPageList.razor.css b/src/HopFrame.Web/Pages/Administration/AdminPageList.razor.css new file mode 100644 index 0000000..cf49df0 --- /dev/null +++ b/src/HopFrame.Web/Pages/Administration/AdminPageList.razor.css @@ -0,0 +1,26 @@ +.title { + display: flex; + flex-direction: row; + gap: 10px; + margin-bottom: 10px; +} + +#search { + margin-left: auto; +} + +th, h3, .sorter { + user-select: none; +} + +h3 { + color: white; +} + +.reload, .sorter { + cursor: pointer; +} + +.bold { + font-weight: bold; +}