#478 contribs page

This commit is contained in:
Hamid Reza Mohammadi 2025-03-30 19:36:14 +03:30
parent 50284f9d3b
commit 600e01d1f2
5 changed files with 28 additions and 6 deletions

View File

@ -10,6 +10,8 @@ using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures;
using RMuseum.Models.Generic.ViewModels; using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
using System.Linq;
namespace GanjooRazor.Pages namespace GanjooRazor.Pages
{ {
@ -146,8 +148,8 @@ namespace GanjooRazor.Pages
var days = JArray.Parse(await responseDays.Content.ReadAsStringAsync()).ToObject<List<GroupedByDateViewModel>>(); var days = JArray.Parse(await responseDays.Content.ReadAsStringAsync()).ToObject<List<GroupedByDateViewModel>>();
List<GroupedByUserViewModel> users = null; List<GroupedByUserViewModel> users = null;
PaginationMetadata usersPagination = null;
if(dataType != "users") if (dataType != "users")
{ {
var responseUsers = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/by/user?PageNumber=1&PageSize=30"); var responseUsers = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/by/user?PageNumber=1&PageSize=30");
@ -156,7 +158,7 @@ namespace GanjooRazor.Pages
return new BadRequestObjectResult(JsonConvert.DeserializeObject<string>(await responseUsers.Content.ReadAsStringAsync())); return new BadRequestObjectResult(JsonConvert.DeserializeObject<string>(await responseUsers.Content.ReadAsStringAsync()));
} }
users = JArray.Parse(await responseUsers.Content.ReadAsStringAsync()).ToObject<List<GroupedByUserViewModel>>(); users = JArray.Parse(await responseUsers.Content.ReadAsStringAsync()).ToObject<List<GroupedByUserViewModel>>();
usersPagination = JsonConvert.DeserializeObject<PaginationMetadata>(responseDays.Headers.GetValues("paging-headers").Single());
} }
var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/summary"); var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/contributions/{dataType}/summary");
@ -176,7 +178,9 @@ namespace GanjooRazor.Pages
{ {
DataType = dataType, DataType = dataType,
Days = days.ToArray(), Days = days.ToArray(),
DaysPagination = JsonConvert.DeserializeObject<PaginationMetadata>(responseDays.Headers.GetValues("paging-headers").Single()),
Users = users == null ? null :users.ToArray(), Users = users == null ? null :users.ToArray(),
UsersPagination = usersPagination,
Summary = summary Summary = summary
} }
} }

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using RMuseum.Models.Generic.ViewModels; using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
namespace GanjooRazor.Pages namespace GanjooRazor.Pages
{ {
@ -7,9 +8,9 @@ namespace GanjooRazor.Pages
{ {
public string DataType { get; set; } public string DataType { get; set; }
public GroupedByDateViewModel[] Days { get; set; } public GroupedByDateViewModel[] Days { get; set; }
public PaginationMetadata DaysPagination { get; set; }
public GroupedByUserViewModel[] Users { get; set; } public GroupedByUserViewModel[] Users { get; set; }
public PaginationMetadata UsersPagination { get; set; }
public SummedUpViewModel Summary { get; set; } public SummedUpViewModel Summary { get; set; }
public _GroupedByDateViewTablePartialModel TableModel public _GroupedByDateViewTablePartialModel TableModel
@ -19,7 +20,9 @@ namespace GanjooRazor.Pages
return new _GroupedByDateViewTablePartialModel() return new _GroupedByDateViewTablePartialModel()
{ {
Days = Days, Days = Days,
DaysPagination = DaysPagination,
Users = Users, Users = Users,
UsersPagination = UsersPagination,
}; };
} }
} }

View File

@ -5,6 +5,11 @@
} }
@if (Model.Days == null || Model.Days.Length == 0) return; @if (Model.Days == null || Model.Days.Length == 0) return;
<div class="pagination-controls">
<button id="dailyPrevPage" class="btn btn-primary" onclick="loadDailyPage('prev')" disabled>صفحهٔ قبل</button>
<span id="dailyCurrentPage">در حال بارگذاری...</span>
<button id="dailyNextPage" class="btn btn-primary" onclick="loadDailyPage('next')">صفحهٔ بعد</button>
</div>
<table class="stats" id="grouped-by-date"> <table class="stats" id="grouped-by-date">
<thead> <thead>
<tr class="h"> <tr class="h">

View File

@ -1,12 +1,14 @@
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
using RMuseum.Models.Generic.ViewModels; using RMuseum.Models.Generic.ViewModels;
using RSecurityBackend.Models.Generic;
namespace GanjooRazor.Pages namespace GanjooRazor.Pages
{ {
public class _GroupedByDateViewTablePartialModel : PageModel public class _GroupedByDateViewTablePartialModel : PageModel
{ {
public GroupedByDateViewModel[] Days { get; set; } public GroupedByDateViewModel[] Days { get; set; }
public PaginationMetadata DaysPagination { get; set; }
public GroupedByUserViewModel[] Users { get; set; } public GroupedByUserViewModel[] Users { get; set; }
public PaginationMetadata UsersPagination { get; set; }
} }
} }

View File

@ -744,6 +744,14 @@ td.c2 {
box-shadow: 0 2px 4px rgba(0,0,0,0.1); box-shadow: 0 2px 4px rgba(0,0,0,0.1);
} }
pagination-controls {
margin: 20px 0;
gap: 10px;
display: flex;
align-items: center;
justify-content: center;
}
@media(max-width: 768px) { @media(max-width: 768px) {
.b { .b {