Split users into separate grids

This commit is contained in:
henry 2025-05-12 01:26:31 -04:00
parent 44a3628489
commit d6aa832f61
4 changed files with 77 additions and 18 deletions

View File

@ -12,12 +12,51 @@
@if (Status != null) @if (Status != null)
{ {
@foreach(var user in Status.Users) <h2>Users with access</h2>
{ <Grid TItem="User" Data="Status.AccessUsers" Class="table table-bordered mt-3" AllowSorting>
<div> <GridColumns>
<p>@user.Id @user.LatestResponse?.HasAccess @user.LatestResponse?.ExpiresOn</p> <GridColumn TItem="User" HeaderText="Id" PropertyName="Id" SortKeySelector="item => item.Id">
</div> @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 { @code {
@ -48,4 +87,9 @@
Manager.AddUser(); Manager.AddUser();
Status = Manager.GetStatus(); Status = Manager.GetStatus();
} }
public void ToggleUserActive(Guid userId)
{
Manager.ToggleUserActivity(userId);
}
} }

View File

@ -4,9 +4,8 @@ namespace AccessQueuePlayground.Models
{ {
public class AccessQueueStatus public class AccessQueueStatus
{ {
public List<User> Users { get; set; } = []; public List<User> AccessUsers { get; set; } = [];
public int QueueSize { get; set; } public List<User> QueuedUsers { get; set; } = [];
public int ActiveTickets { get; set; } public List<User> InactiveUsers { get; set; } = [];
public int UnexpiredTickets { get; set; }
} }
} }

View File

@ -52,13 +52,29 @@ namespace AccessQueuePlayground.Services
var newStatus = new AccessQueueStatus(); var newStatus = new AccessQueueStatus();
foreach (var user in userList) foreach (var user in userList)
{ {
AccessResponse? response = user.LatestResponse;
if (user.Active) if (user.Active)
{ {
response = await _accessService.RequestAccess(user.Id); user.LatestResponse = await _accessService.RequestAccess(user.Id);
user.LatestResponse = response; 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; _status = newStatus;
NotifyStatusUpdated(); NotifyStatusUpdated();

View File

@ -6,9 +6,9 @@
} }
}, },
"AccessQueue": { "AccessQueue": {
"CapacityLimit": 10, // Maximum number of active users "CapacityLimit": 3, // Maximum number of active users
"ActivitySeconds": 5, // Time since last access before a user is considered inactive "ActivitySeconds": 2, // Time since last access before a user is considered inactive
"ExpirationSeconds": 30, // 12 hours - Time before a user access is revoked "ExpirationSeconds": 10, // 12 hours - Time before a user access is revoked
"RollingExpiration": true // Whether to extend expiration time on access "RollingExpiration": true // Whether to extend expiration time on access
}, },
"AllowedHosts": "*" "AllowedHosts": "*"