From c5e7d1dead9d5d20aa5fc3f475d53670acdac7a5 Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Sun, 20 Sep 2026 23:35:33 +0330 Subject: [PATCH] feat(nav-menu): add link to Invitations Report in navigation menu - Introduced a new navigation link for the Invitations Report page in NavMenu.razor. - Updated RouteConstance.cs to include the new InvitationsReport constant. - Made minor adjustments to .gitignore for improved clarity. --- .gitignore | 4 +- .../Common/Utilities/RouteConstance.cs | 1 + .../Pages/User/InvitationsReportPage.razor | 85 +++++++++++++++++++ .../Pages/User/InvitationsReportPage.razor.cs | 74 ++++++++++++++++ src/BackOffice/Shared/NavMenu.razor | 5 ++ 5 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 src/BackOffice/Pages/User/InvitationsReportPage.razor create mode 100644 src/BackOffice/Pages/User/InvitationsReportPage.razor.cs diff --git a/.gitignore b/.gitignore index 3508f6e..2f9a25a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,10 @@ # ---> VisualStudio ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. -## +## ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore -# User-specific files +# User-specific files *.rsuser *.suo *.user diff --git a/src/BackOffice/Common/Utilities/RouteConstance.cs b/src/BackOffice/Common/Utilities/RouteConstance.cs index 9da68a5..6298da1 100644 --- a/src/BackOffice/Common/Utilities/RouteConstance.cs +++ b/src/BackOffice/Common/Utilities/RouteConstance.cs @@ -8,6 +8,7 @@ public static class RouteConstance public const string Package = "/PackagePage/"; public const string Role = "/RolePage/"; public const string UserPage = "/UserPage/"; + public const string InvitationsReport = "/InvitationsReportPage/"; public const string UserOrder = "/UserOrderPage/"; public const string Orders = "/OrdersPage/"; public const string OrdersSalesReports = "/OrdersSalesReportsPage/"; diff --git a/src/BackOffice/Pages/User/InvitationsReportPage.razor b/src/BackOffice/Pages/User/InvitationsReportPage.razor new file mode 100644 index 0000000..ebf2740 --- /dev/null +++ b/src/BackOffice/Pages/User/InvitationsReportPage.razor @@ -0,0 +1,85 @@ +@attribute [Route(RouteConstance.InvitationsReport)] +@using CMSMicroservice.Protobuf.Protos.User +@using BackOffice.Common.BaseComponents +@using DataModel = CMSMicroservice.Protobuf.Protos.User.InvitationReportModel + + + + + + + + + + + + + + + + + + + + + + + + همه + فعال + غیرفعال + + + + + + + گزارش دعوت‌ها (جدیدترین اول) + + + + + + @($"{context.Item.InviterFirstName} {context.Item.InviterLastName}".Trim()) + @context.Item.InviterMobile + + + + + @($"{context.Item.InviteeFirstName} {context.Item.InviteeLastName}".Trim()) + @context.Item.InviteeMobile + + + + + @(context.Item.InviteeRegisteredAt?.ToDateTime().ToLocalTime().ToString("yyyy/MM/dd HH:mm") ?? "—") + + + + + @if (context.Item.InviteeClubActive) + { + فعال + } + else + { + غیرفعال + } + + + + + @(context.Item.InvitedAt?.ToDateTime().ToLocalTime().ToString("yyyy/MM/dd HH:mm") ?? "—") + + + + + + + + موردی یافت نشد + + + + diff --git a/src/BackOffice/Pages/User/InvitationsReportPage.razor.cs b/src/BackOffice/Pages/User/InvitationsReportPage.razor.cs new file mode 100644 index 0000000..fd37548 --- /dev/null +++ b/src/BackOffice/Pages/User/InvitationsReportPage.razor.cs @@ -0,0 +1,74 @@ +using CMSMicroservice.Protobuf.Protos.User; +using BackOffice.Common.BaseComponents; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using DataModel = CMSMicroservice.Protobuf.Protos.User.InvitationReportModel; + +namespace BackOffice.Pages.User; + +public partial class InvitationsReportPage +{ + [Inject] public UserContract.UserContractClient UserContract { get; set; } = default!; + + private MudDataGrid _gridData = default!; + private BasePageComponent _basePage = default!; + private GetInvitationsByFilterRequest _request = new() { Filter = new() }; + private string _clubActiveFilter = string.Empty; + + private async Task> ServerReload(GridState state) + { + _request.Filter ??= new(); + ApplyClubFilter(); + _request.PaginationState ??= new(); + _request.PaginationState.PageNumber = state.Page + 1; + _request.PaginationState.PageSize = state.PageSize; + _request.SortBy = "newest"; + + var result = await UserContract.GetInvitationsByFilterAsync(_request); + if (result?.Models != null && result.Models.Any()) + { + return new GridData + { + Items = result.Models.ToList(), + TotalItems = (int)result.MetaData.TotalCount + }; + } + + return new GridData(); + } + + private void ApplyClubFilter() + { + _request.Filter ??= new(); + if (_clubActiveFilter == "true") + _request.Filter.InviteeClubActive = true; + else if (_clubActiveFilter == "false") + _request.Filter.InviteeClubActive = false; + else + _request.Filter.InviteeClubActive = null; + } + + private void ReLoadData() + { + _ = _gridData.ReloadServerData(); + } + + public async Task OnFilterSubmit() + { + ApplyClubFilter(); + _basePage.IsFiltered = true; + StateHasChanged(); + ReLoadData(); + await Task.CompletedTask; + } + + public async Task OnFilterCleared() + { + _basePage.IsFiltered = false; + _clubActiveFilter = string.Empty; + _request = new() { Filter = new() }; + StateHasChanged(); + ReLoadData(); + await Task.CompletedTask; + } +} diff --git a/src/BackOffice/Shared/NavMenu.razor b/src/BackOffice/Shared/NavMenu.razor index c2c9776..4e825a7 100644 --- a/src/BackOffice/Shared/NavMenu.razor +++ b/src/BackOffice/Shared/NavMenu.razor @@ -185,6 +185,11 @@ Icon="@Icons.Material.Filled.People"> کاربران + + گزارش دعوت‌ها + } @if (CanManageRoles)