@page "/administration/groups" @rendermode InteractiveServer @layout AdminLayout @using System.Globalization @using static Microsoft.AspNetCore.Components.Web.RenderMode @using BlazorStrap @using Microsoft.AspNetCore.Components.Web @using HopFrame.Web.Components @using HopFrame.Web.Components.Administration @using BlazorStrap.V5 @using CurrieTechnologies.Razor.SweetAlert2 @using HopFrame.Database.Models @using HopFrame.Security.Claims @using HopFrame.Security.Services @using HopFrame.Web.Pages.Administration.Layout Groups

Groups administration

Add Group
Name @if (_currentOrder == OrderType.Name) { } Description Default Created @if (_currentOrder == OrderType.Created) { } @if (_hasEditPrivileges || _hasDeletePrivileges) { Actions } @foreach (var group in _groups) { @group.Name.Replace("group.", "") @group.Description @if (group.IsDefaultGroup) { Yes } else { No } @group.CreatedAt @if (_hasEditPrivileges || _hasDeletePrivileges) { @if (_hasEditPrivileges) { Edit } @if (_hasDeletePrivileges) { Delete } } } @inject IPermissionService Permissions @inject ITokenContext Auth @inject SweetAlertService Alerts @code { private IList _groups = new List(); private bool _hasEditPrivileges = false; private bool _hasDeletePrivileges = false; private string _searchText; private OrderType _currentOrder = OrderType.None; private OrderDirection _currentOrderDirection = OrderDirection.Asc; private GroupAddModal _groupAddModal; protected override async Task OnInitializedAsync() { _groups = await Permissions.GetPermissionGroups(); _hasEditPrivileges = await Permissions.HasPermission(Security.AdminPermissions.EditGroup, Auth.User.Id); _hasDeletePrivileges = await Permissions.HasPermission(Security.AdminPermissions.DeleteGroup, Auth.User.Id); } private async Task Reload() { _groups = new List(); _groups = await Permissions.GetPermissionGroups(); OrderBy(_currentOrder, false); StateHasChanged(); } private async Task Search() { var groups = await Permissions.GetPermissionGroups(); if (!string.IsNullOrWhiteSpace(_searchText)) { groups = groups .Where(group => group.Name.Contains(_searchText) || group.Description?.Contains(_searchText) == true || group.CreatedAt.ToString(CultureInfo.InvariantCulture).Contains(_searchText) || group.Permissions.Any(perm => perm.PermissionName.Contains(_searchText))) .ToList(); } _groups = groups; OrderBy(_currentOrder, false); } private void OrderBy(OrderType type, bool changeDir = true) { if (_currentOrder == type && changeDir) _currentOrderDirection = (OrderDirection)(((byte)_currentOrderDirection + 1) % 2); if (_currentOrder != type) _currentOrderDirection = OrderDirection.Asc; if (type == OrderType.Name) { _groups = _currentOrderDirection == OrderDirection.Asc ? _groups.OrderBy(group => group.Name).ToList() : _groups.OrderByDescending(group => group.Name).ToList(); } else if (type == OrderType.Created) { _groups = _currentOrderDirection == OrderDirection.Asc ? _groups.OrderBy(group => group.CreatedAt).ToList() : _groups.OrderByDescending(group => group.CreatedAt).ToList(); } _currentOrder = type; } private async Task Delete(PermissionGroup group) { var result = await Alerts.FireAsync(new SweetAlertOptions { Title = "Are you sure?", Text = "You won't be able to revert this!", Icon = SweetAlertIcon.Warning, ConfirmButtonText = "Yes", ShowCancelButton = true, ShowConfirmButton = true }); if (result.IsConfirmed) { await Permissions.DeletePermissionGroup(group); await Reload(); await Alerts.FireAsync(new SweetAlertOptions { Title = "Deleted!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } } private enum OrderType { None, Name, Created } private enum OrderDirection : byte { Asc = 0, Desc = 1 } }