Made admin pages dependency injectable

This commit is contained in:
2024-11-22 18:58:39 +01:00
parent e257e36b66
commit c00c30ea3f
14 changed files with 136 additions and 74 deletions

View File

@@ -1,7 +1,6 @@
@rendermode InteractiveServer
@using System.Collections
@using System.Globalization
@using BlazorStrap
@using BlazorStrap.Shared.Components.Modal
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@@ -144,7 +143,7 @@
_currentPage = page;
_entry = entryToEdit;
_isEdit = entryToEdit is not null;
_repository = Provider.GetService(_currentPage.RepositoryProvider) as IModelRepository;
_repository = _currentPage.LoadModelRepository(Provider);
_entry ??= Activator.CreateInstance(_currentPage.ModelType);
_context = new EditContext(_entry);
@@ -247,8 +246,7 @@
foreach (var value in _values) {
if (value.Key.Unique) {
if (value.Value == value.Key.GetValue(_entry)) continue;
var repo = Provider.GetService(_currentPage.RepositoryProvider) as IModelRepository;
var data = repo!.ReadAllO().GetAwaiter().GetResult();
var data = _repository!.ReadAllO().GetAwaiter().GetResult();
foreach (var entry in data) {
var other = value.Key.GetValue(entry);
if (!other.Equals(value.Value)) continue;
@@ -295,7 +293,7 @@
throw new ArgumentException($"'{property.Name}' cannot be a selector because a admin page for '{type.Name}' does not exist!");
}
var repo = Provider.GetService(page.RepositoryProvider) as IModelRepository;
var repo = page.LoadModelRepository(Provider);
var objects = (await repo!.ReadAllO()).ToArray();
_selectorValues[property] = objects;

View File

@@ -2,6 +2,7 @@ using System.Text.RegularExpressions;
using HopFrame.Database.Models;
using HopFrame.Security;
using HopFrame.Web.Admin;
using HopFrame.Web.Admin.Attributes;
using HopFrame.Web.Admin.Generators;
using HopFrame.Web.Admin.Models;
using HopFrame.Web.Repositories;
@@ -10,7 +11,10 @@ namespace HopFrame.Web;
internal class HopAdminContext : AdminPagesContext {
[AdminPageUrl("users")]
public AdminPage<User> Users { get; set; }
[AdminPageUrl("groups")]
public AdminPage<PermissionGroup> Groups { get; set; }
public override void OnModelCreating(IAdminContextGenerator generator) {

View File

@@ -106,6 +106,7 @@
@inject ITokenContext Auth
@inject IPermissionRepository Permissions
@inject SweetAlertService Alerts
@inject NavigationManager Navigator
@code {
[Parameter]
@@ -127,12 +128,17 @@
protected override async Task OnInitializedAsync() {
_pageData = Pages.LoadAdminPage(Url);
if (_pageData is null) {
Navigator.NavigateTo("/administration", true);
return;
}
_currentSortProperty = _pageData.DefaultSortPropertyName;
_currentSortDirection = _pageData.DefaultSortDirection;
if (_pageData.RepositoryProvider is null)
throw new ArgumentException($"AdminPage '{_pageData.Title}' does not specify a model repository!'");
_modelRepository = Provider.GetService(_pageData.RepositoryProvider) as IModelRepository;
_modelRepository = _pageData.LoadModelRepository(Provider);
_hasEditPermission = _pageData.Permissions.Update is null || await Permissions.HasPermission(Auth.User, _pageData.Permissions.Update);
_hasDeletePermission = _pageData.Permissions.Delete is null || await Permissions.HasPermission(Auth.User, _pageData.Permissions.Delete);