Split users into separate grids
This commit is contained in:
parent
44a3628489
commit
d6aa832f61
|
@ -10,14 +10,53 @@
|
|||
<Button Color="ButtonColor.Success" @onclick="AddUser">Add User</Button>
|
||||
<Button Color="ButtonColor.Primary" @onclick="Refresh">Refresh</Button>
|
||||
|
||||
@if(Status != null)
|
||||
@if (Status != null)
|
||||
{
|
||||
@foreach(var user in Status.Users)
|
||||
{
|
||||
<div>
|
||||
<p>@user.Id @user.LatestResponse?.HasAccess @user.LatestResponse?.ExpiresOn</p>
|
||||
</div>
|
||||
}
|
||||
<h2>Users with access</h2>
|
||||
<Grid TItem="User" Data="Status.AccessUsers" Class="table table-bordered mt-3" AllowSorting>
|
||||
<GridColumns>
|
||||
<GridColumn TItem="User" HeaderText="Id" PropertyName="Id" SortKeySelector="item => item.Id">
|
||||
@context.Id
|
||||
</GridColumn>
|
||||
<GridColumn TItem="User" HeaderText="Expiration" PropertyName="LatestResponse?.ExpiresOn" SortKeySelector="item => item.LatestResponse.ExpiresOn">
|
||||
@context.LatestResponse?.ExpiresOn
|
||||
</GridColumn>
|
||||
<GridColumn TItem="User" HeaderText="Active">
|
||||
<ChildContent>
|
||||
<Switch Value="context.Active" ValueExpression="() => context.Active" ValueChanged="(_) => ToggleUserActive(context.Id)" />
|
||||
</ChildContent>
|
||||
</GridColumn>
|
||||
</GridColumns>
|
||||
</Grid>
|
||||
<h2>Users in queue</h2>
|
||||
<Grid TItem="User" Data="Status.QueuedUsers" Class="table table-bordered mt-3" AllowSorting>
|
||||
<GridColumns>
|
||||
<GridColumn TItem="User" HeaderText="Id" PropertyName="Id" SortKeySelector="item => item.Id">
|
||||
@context.Id
|
||||
</GridColumn>
|
||||
<GridColumn TItem="User" HeaderText="Queue Postition" PropertyName="LatestResponse?.RequestsAhead">
|
||||
@(context.LatestResponse?.RequestsAhead ?? 0 + 1)
|
||||
</GridColumn>
|
||||
<GridColumn TItem="User" HeaderText="Active">
|
||||
<ChildContent>
|
||||
<Switch Value="context.Active" ValueExpression="() => context.Active" ValueChanged="(_) => ToggleUserActive(context.Id)" />
|
||||
</ChildContent>
|
||||
</GridColumn>
|
||||
</GridColumns>
|
||||
</Grid>
|
||||
<h2>Inactive users</h2>
|
||||
<Grid TItem="User" Data="Status.InactiveUsers" Class="table table-bordered mt-3" AllowSorting>
|
||||
<GridColumns>
|
||||
<GridColumn TItem="User" HeaderText="Id" PropertyName="Id" SortKeySelector="item => item.Id">
|
||||
@context.Id
|
||||
</GridColumn>
|
||||
<GridColumn TItem="User" HeaderText="Active">
|
||||
<ChildContent>
|
||||
<Switch Value="context.Active" ValueExpression="() => context.Active" ValueChanged="(_) => ToggleUserActive(context.Id)" />
|
||||
</ChildContent>
|
||||
</GridColumn>
|
||||
</GridColumns>
|
||||
</Grid>
|
||||
}
|
||||
|
||||
@code {
|
||||
|
@ -48,4 +87,9 @@
|
|||
Manager.AddUser();
|
||||
Status = Manager.GetStatus();
|
||||
}
|
||||
|
||||
public void ToggleUserActive(Guid userId)
|
||||
{
|
||||
Manager.ToggleUserActivity(userId);
|
||||
}
|
||||
}
|
|
@ -4,9 +4,8 @@ namespace AccessQueuePlayground.Models
|
|||
{
|
||||
public class AccessQueueStatus
|
||||
{
|
||||
public List<User> Users { get; set; } = [];
|
||||
public int QueueSize { get; set; }
|
||||
public int ActiveTickets { get; set; }
|
||||
public int UnexpiredTickets { get; set; }
|
||||
public List<User> AccessUsers { get; set; } = [];
|
||||
public List<User> QueuedUsers { get; set; } = [];
|
||||
public List<User> InactiveUsers { get; set; } = [];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,13 +52,29 @@ namespace AccessQueuePlayground.Services
|
|||
var newStatus = new AccessQueueStatus();
|
||||
foreach (var user in userList)
|
||||
{
|
||||
AccessResponse? response = user.LatestResponse;
|
||||
if (user.Active)
|
||||
{
|
||||
response = await _accessService.RequestAccess(user.Id);
|
||||
user.LatestResponse = response;
|
||||
user.LatestResponse = await _accessService.RequestAccess(user.Id);
|
||||
if (user.LatestResponse?.HasAccess ?? false)
|
||||
{
|
||||
newStatus.AccessUsers.Add(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
newStatus.QueuedUsers.Add(user);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(user.LatestResponse?.ExpiresOn != null && user.LatestResponse.ExpiresOn > DateTime.UtcNow)
|
||||
{
|
||||
newStatus.AccessUsers.Add(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
newStatus.InactiveUsers.Add(user);
|
||||
}
|
||||
}
|
||||
newStatus.Users.Add(user);
|
||||
}
|
||||
_status = newStatus;
|
||||
NotifyStatusUpdated();
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
}
|
||||
},
|
||||
"AccessQueue": {
|
||||
"CapacityLimit": 10, // Maximum number of active users
|
||||
"ActivitySeconds": 5, // Time since last access before a user is considered inactive
|
||||
"ExpirationSeconds": 30, // 12 hours - Time before a user access is revoked
|
||||
"CapacityLimit": 3, // Maximum number of active users
|
||||
"ActivitySeconds": 2, // Time since last access before a user is considered inactive
|
||||
"ExpirationSeconds": 10, // 12 hours - Time before a user access is revoked
|
||||
"RollingExpiration": true // Whether to extend expiration time on access
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
|
|
Loading…
Reference in New Issue