Skip to content

Commit

Permalink
implemented ListUsers page, refactored Specification classes
Browse files Browse the repository at this point in the history
  • Loading branch information
suxrobGM committed Dec 3, 2023
1 parent 1f615d7 commit 1ebe392
Show file tree
Hide file tree
Showing 49 changed files with 320 additions and 200 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using Logistics.Shared.Models;

namespace Logistics.AdminApp.Utils;
namespace Logistics.AdminApp.Extensions;

public static class AddressUtils
public static class AddressExtensions
{
public static string ConvertToString(AddressDto? address)
public static string ConvertToString(this AddressDto? address)
{
if (address is null)
{
Expand Down
43 changes: 43 additions & 0 deletions src/Client/Logistics.AdminApp/Extensions/LoadDataArgsExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Radzen;

namespace Logistics.AdminApp.Extensions;

public static class LoadDataArgsExtensions
{
public static int GetPageNumber(this LoadDataArgs loadDataArgs)
{
var top = loadDataArgs.Top ?? 10;
var skip = loadDataArgs.Skip ?? 0;
var page = (int)Math.Ceiling((skip + 1) / (double)top);
return page;
}

public static int GetPageSize(this LoadDataArgs loadDataArgs)
{
return loadDataArgs.Top ?? 10;
}

public static string GetOrderBy(this LoadDataArgs loadDataArgs)
{
if (string.IsNullOrEmpty(loadDataArgs.OrderBy))
{
return string.Empty;
}

var splitStr = loadDataArgs.OrderBy.Split(' ');

switch (splitStr.Length)
{
case 1:
return splitStr[0];
case 0:
return string.Empty;
default:
{
var sortProperty = splitStr[0];
var orderSpecifier = splitStr[1];
return orderSpecifier == "desc" ? $"-{sortProperty}" : sortProperty;
}
}
}
}
2 changes: 1 addition & 1 deletion src/Client/Logistics.AdminApp/Layout/MainLayout.razor
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
<RadzenPanelMenuItem Text="Plans" Icon="cases" Path="/subscription-plans"/>
<RadzenPanelMenuItem Text="Subscription customers" Icon="account_balance" Path="/subscriptions"/>
</RadzenPanelMenuItem>
<RadzenPanelMenuItem Text="Users" Icon="group"/>
<RadzenPanelMenuItem Text="Users" Icon="group" Path="/users"/>
</RadzenPanelMenu>
</RadzenSidebar>
</Authorized>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Logistics.Shared;
using Logistics.AdminApp.Extensions;
using Logistics.Shared;
using Logistics.Shared.Models;
using Microsoft.AspNetCore.Components;
using Radzen;
Expand All @@ -21,9 +22,10 @@ public partial class ListSubscriptionPlans : PageBase

private async void LoadData(LoadDataArgs e)
{
var page = (e.Skip ?? 0) + 1;
var pageSize = e.Top ?? 10;
var pagedData = await CallApiAsync(api => api.GetSubscriptionPlansAsync(new PagedQuery(page, pageSize)));
var orderBy = e.GetOrderBy();
var page = e.GetPageNumber();
var pageSize = e.GetPageSize();
var pagedData = await CallApiAsync(api => api.GetSubscriptionPlansAsync(new PagedQuery(orderBy, page, pageSize)));
_subscriptionPlans = pagedData?.Items;
_totalRecords = pagedData?.TotalItems ?? 0;
StateHasChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,46 +16,54 @@
<Columns>
<RadzenGridColumn TItem="SubscriptionDto"
Property="Tenant"
Title="Tenant">
Title="Tenant"
SortProperty="TenantName">
<Template Context="subscription">
<RadzenText Text="@subscription.Tenant.Name" />
</Template>
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="Tenant"
Title="Company">
Title="Company"
SortProperty="TenantCompanyName">
<Template Context="subscription">
<RadzenText Text="@subscription.Tenant.CompanyName" />
</Template>
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="Plan"
Title="Subscription Plan">
Title="Subscription Plan"
SortProperty="PlanName">
<Template Context="subscription">
<RadzenText Text="@subscription.Plan.Name" />
</Template>
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="Status"
Title="Status">
Title="Status"
SortProperty="Status">
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="StartDate"
Title="Start Date">
Title="Start Date"
SortProperty="StartDate">
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="NextPaymentDate"
Title="Next Payment Date">
Title="Next Payment Date"
SortProperty="NextPaymentDate">
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="TrialEndDate"
Title="Trial End Date">
Title="Trial End Date"
SortProperty="TrialEndDate">
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto"
Property="EndDate"
Title="End Date">
Title="End Date"
SortProperty="EndDate">
</RadzenGridColumn>
<RadzenGridColumn TItem="SubscriptionDto" Title="Action">
<RadzenGridColumn TItem="SubscriptionDto" Title="Action" Sortable="false">
<Template Context="subscription">
<RadzenButton Click="@(() => Navigation.NavigateTo($"subscriptions/{subscription.Id}"))">Edit</RadzenButton>
</Template>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Logistics.Shared;
using Logistics.AdminApp.Extensions;
using Logistics.Shared;
using Logistics.Shared.Models;
using Microsoft.AspNetCore.Components;
using Radzen;
Expand All @@ -21,9 +22,10 @@ public partial class ListSubscriptions : PageBase

private async void LoadData(LoadDataArgs e)
{
var page = (e.Skip ?? 0) + 1;
var pageSize = e.Top ?? 10;
var pagedData = await CallApiAsync(api => api.GetSubscriptionsAsync(new PagedQuery(page, pageSize)));
var orderBy = e.GetOrderBy();
var page = e.GetPageNumber();
var pageSize = e.GetPageSize();
var pagedData = await CallApiAsync(api => api.GetSubscriptionsAsync(new PagedQuery(orderBy, page, pageSize)));
_subscriptions = pagedData?.Items;
_totalRecords = pagedData?.TotalItems ?? 0;
StateHasChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
var headText = EditMode ? "Edit" : "Add a new";
var submitBtnText = EditMode ? "Save" : "Submit";
}

<RadzenText TextStyle="TextStyle.H3">@headText Tenant</RadzenText>
<hr/>

Expand Down
21 changes: 13 additions & 8 deletions src/Client/Logistics.AdminApp/Pages/Tenant/ListTenants.razor
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@page "/tenants"
@using Logistics.AdminApp.Utils
@using Logistics.AdminApp.Extensions
@inherits PageBase

<RadzenText TextStyle="TextStyle.H3">Tenants</RadzenText>
Expand All @@ -17,31 +17,36 @@
<Columns>
<RadzenGridColumn TItem="TenantDto"
Property="Name"
Title="Name">
Title="Name"
SortProperty="Name">
</RadzenGridColumn>
<RadzenGridColumn TItem="TenantDto"
Property="CompanyName"
Title="Company">
Title="Company"
SortProperty="CompanyName">
</RadzenGridColumn>
<RadzenGridColumn TItem="TenantDto"
Property="CompanyAddress"
Title="Company Address">
Title="Company Address"
SortProperty="CompanyAddress">
<Template Context="tenant">
@AddressUtils.ConvertToString(tenant.CompanyAddress)
@tenant.CompanyAddress.ConvertToString()
</Template>
</RadzenGridColumn>
<RadzenGridColumn TItem="TenantDto"
Property="ConnectionString"
Title="DB Connection">
Title="DB Connection"
Sortable="false">
</RadzenGridColumn>
<RadzenGridColumn TItem="TenantDto"
Property="Subscription"
Title="Subscription Plan">
Title="Subscription Plan"
SortProperty="SubscriptionPlan">
<Template Context="tenant">
@tenant.Subscription?.Plan.Name
</Template>
</RadzenGridColumn>
<RadzenGridColumn TItem="TenantDto" Title="Action">
<RadzenGridColumn TItem="TenantDto" Title="Action" Sortable="false">
<Template Context="tenant">
<RadzenButton Click="@(() => Navigation.NavigateTo($"tenants/{tenant.Id}"))">Edit</RadzenButton>
</Template>
Expand Down
13 changes: 6 additions & 7 deletions src/Client/Logistics.AdminApp/Pages/Tenant/ListTenants.razor.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using Logistics.Shared.Models;
using Logistics.AdminApp.Extensions;
using Logistics.Shared.Models;
using Logistics.Shared;
using Logistics.Shared.Policies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Radzen;

namespace Logistics.AdminApp.Pages.Tenant;

[Authorize(Policy = Permissions.Tenants.View)]
public partial class ListTenants : PageBase
{
private IEnumerable<TenantDto>? _tenants;
Expand All @@ -22,9 +20,10 @@ public partial class ListTenants : PageBase

private async void LoadTenants(LoadDataArgs e)
{
var page = (e.Skip ?? 0) + 1;
var pageSize = e.Top ?? 10;
var pagedData = await CallApiAsync(api => api.GetTenantsAsync(new SearchableQuery(null, page, pageSize)));
var orderBy = e.GetOrderBy();
var page = e.GetPageNumber();
var pageSize = e.GetPageSize();
var pagedData = await CallApiAsync(api => api.GetTenantsAsync(new SearchableQuery(null, orderBy, page, pageSize)));
_tenants = pagedData?.Items;
_totalRecords = pagedData?.TotalItems ?? 0;
StateHasChanged();
Expand Down
37 changes: 37 additions & 0 deletions src/Client/Logistics.AdminApp/Pages/User/ListUsers.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
@page "/users"
@inherits PageBase

<RadzenText TextStyle="TextStyle.H3">Tenants</RadzenText>
<hr/>

<RadzenGrid Data="_users"
LoadData="LoadData"
Count="_totalRecords"
AllowPaging="true"
AllowSorting="true"
PageSizeOptions="new[] { 10, 25, 50 }"
PageSize="10">
<Columns>
<RadzenGridColumn TItem="UserDto"
Property="FirstName"
Title="First Name">
</RadzenGridColumn>
<RadzenGridColumn TItem="UserDto"
Property="LastName"
Title="Last Name">
</RadzenGridColumn>
<RadzenGridColumn TItem="UserDto"
Property="Email"
Title="Email">
</RadzenGridColumn>
<RadzenGridColumn TItem="UserDto"
Property="PhoneNumber"
Title="Phone Number">
</RadzenGridColumn>
@* <RadzenGridColumn TItem="UserDto" Title="Action"> *@
@* <Template Context="user"> *@
@* <RadzenButton Click="@(() => Navigation.NavigateTo($"tenants/{tenant.Id}"))">Edit</RadzenButton> *@
@* </Template> *@
@* </RadzenGridColumn> *@
</Columns>
</RadzenGrid>
33 changes: 33 additions & 0 deletions src/Client/Logistics.AdminApp/Pages/User/ListUsers.razor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using Logistics.AdminApp.Extensions;
using Logistics.Shared.Models;
using Logistics.Shared;
using Microsoft.AspNetCore.Components;
using Radzen;

namespace Logistics.AdminApp.Pages.User;

public partial class ListUsers : PageBase
{
private IEnumerable<UserDto>? _users;
private int _totalRecords = 10;


#region Injectable services

[Inject]
private NavigationManager Navigation { get; set; } = default!;

#endregion


private async void LoadData(LoadDataArgs e)
{
var orderBy = e.GetOrderBy();
var page = e.GetPageNumber();
var pageSize = e.GetPageSize();
var pagedData = await CallApiAsync(api => api.GetUsersAsync(new SearchableQuery(null, orderBy, page, pageSize)));
_users = pagedData?.Items;
_totalRecords = pagedData?.TotalItems ?? 0;
StateHasChanged();
}
}
1 change: 1 addition & 0 deletions src/Client/Logistics.Client/Abstractions/IUserApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ namespace Logistics.Client.Abstractions;
public interface IUserApi
{
Task<ResponseResult<UserDto>> GetUserAsync(string userId);
Task<PagedResponseResult<UserDto>> GetUsersAsync(SearchableQuery query);
Task<ResponseResult> UpdateUserAsync(UpdateUser user);
Task<ResponseResult<OrganizationDto[]>> GetUserOrganizations(string userId);
}
5 changes: 5 additions & 0 deletions src/Client/Logistics.Client/Implementations/ApiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,11 @@ public Task<ResponseResult<UserDto>> GetUserAsync(string userId)
return MakeGetRequestAsync<ResponseResult<UserDto>>($"users/{userId}");
}

public Task<PagedResponseResult<UserDto>> GetUsersAsync(SearchableQuery query)
{
return MakeGetRequestAsync<PagedResponseResult<UserDto>>("users", query.ToDictionary());
}

public Task<ResponseResult> UpdateUserAsync(UpdateUser user)
{
return MakePutRequestAsync<ResponseResult, UpdateUser>($"users/{user.UserId}", user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public GetSubscriptionPlansHandler(IMasterUnityOfWork masterUow)
GetSubscriptionPlansQuery req, CancellationToken cancellationToken)
{
var totalItems = await _masterUow.Repository<SubscriptionPlan>().CountAsync();
var spec = new GetSubscriptionPlans(req.OrderBy, req.Page, req.PageSize, req.Descending);
var spec = new GetSubscriptionPlans(req.OrderBy, req.Page, req.PageSize);

var items = _masterUow.Repository<SubscriptionPlan>()
.ApplySpecification(spec)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public GetSubscriptionsHandler(IMasterUnityOfWork masterUow)
GetSubscriptionsQuery req, CancellationToken cancellationToken)
{
var totalItems = await _masterUow.Repository<Subscription>().CountAsync();
var spec = new GetSubscriptions(req.OrderBy, req.Page, req.PageSize, req.Descending);
var spec = new GetSubscriptions(req.OrderBy, req.Page, req.PageSize);

var items = _masterUow.Repository<Subscription>()
.ApplySpecification(spec)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public GetTenantsHandler(IMasterUnityOfWork masterUow)
protected override async Task<PagedResponseResult<TenantDto>> HandleValidated(GetTenantsQuery req, CancellationToken cancellationToken)
{
var totalItems = await _masterUow.Repository<Tenant>().CountAsync();
var spec = new SearchTenants(req.Search, req.OrderBy, req.Page, req.PageSize, req.Descending);
var spec = new SearchTenants(req.Search, req.OrderBy, req.Page, req.PageSize);

var items = _masterUow.Repository<Tenant>()
.ApplySpecification(spec)
Expand Down
Loading

0 comments on commit 1ebe392

Please sign in to comment.