Made admin pages dependency injectable
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user