Skip to content

Commit

Permalink
"UI" Paging in profiles
Browse files Browse the repository at this point in the history
  • Loading branch information
robertmuehsig committed Jun 17, 2014
1 parent e50dce0 commit d25db2e
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 31 deletions.
8 changes: 2 additions & 6 deletions src/NuGetGallery/Controllers/UsersController.cs
Expand Up @@ -253,7 +253,7 @@ public virtual async Task<ActionResult> Confirm(string username, string token)
return View(model); return View(model);
} }


public virtual ActionResult Profiles(string username) public virtual ActionResult Profiles(string username, int page = 1)
{ {
var user = UserService.FindByUsername(username); var user = UserService.FindByUsername(username);
if (user == null) if (user == null)
Expand All @@ -269,11 +269,7 @@ public virtual ActionResult Profiles(string username)
Version = null Version = null
}).ToList(); }).ToList();


var model = new UserProfileModel(user) var model = new UserProfileModel(user, packages, page - 1, Constants.DefaultPackageListPageSize, Url);
{
Packages = packages,
TotalPackageDownloadCount = packages.Sum(p => p.TotalDownloadCount),
};


return View(model); return View(model);
} }
Expand Down
41 changes: 28 additions & 13 deletions src/NuGetGallery/UrlExtensions.cs
Expand Up @@ -70,6 +70,8 @@ public static string PackageList(this UrlHelper url, int page, string q)
}); });
} }




public static string CuratedPackageList(this UrlHelper url, int page, string q, string curatedFeedName) public static string CuratedPackageList(this UrlHelper url, int page, string q, string curatedFeedName)
{ {
return url.Action("ListPackages", "CuratedFeeds", new return url.Action("ListPackages", "CuratedFeeds", new
Expand Down Expand Up @@ -141,7 +143,7 @@ public static string PackageDownload(this UrlHelper url, int feedVersion, string
string routeName = "v" + feedVersion + RouteName.DownloadPackage; string routeName = "v" + feedVersion + RouteName.DownloadPackage;
string protocol = url.RequestContext.HttpContext.Request.IsSecureConnection ? "https" : "http"; string protocol = url.RequestContext.HttpContext.Request.IsSecureConnection ? "https" : "http";
string result = url.RouteUrl(routeName, new { Id = id, Version = version }, protocol: protocol); string result = url.RouteUrl(routeName, new { Id = id, Version = version }, protocol: protocol);

// Ensure trailing slashes for versionless package URLs, as a fix for package filenames that look like known file extensions // Ensure trailing slashes for versionless package URLs, as a fix for package filenames that look like known file extensions
return version == null ? EnsureTrailingSlash(result) : result; return version == null ? EnsureTrailingSlash(result) : result;
} }
Expand Down Expand Up @@ -198,14 +200,26 @@ public static string UploadPackage(this UrlHelper url)
return url.RouteUrl(RouteName.UploadPackage); return url.RouteUrl(RouteName.UploadPackage);
} }


public static string User(this UrlHelper url, User user, string scheme = null) public static string User(this UrlHelper url, User user, int page = 1, string scheme = null)
{ {
string result = url.Action( string result;
actionName: "Profiles", if (page == 1)
controllerName: "Users", {
routeValues: new { username = user.Username }, result = url.Action(actionName: "Profiles",
protocol: scheme); controllerName: "Users",
return EnsureTrailingSlash(result); routeValues: new { username = user.Username },
protocol: scheme);
}
else
{
result = url.Action(actionName: "Profiles",
controllerName: "Users",
routeValues: new { username = user.Username, page = page },
protocol: scheme);
}


return result;
} }


public static string EditPackage(this UrlHelper url, string id, string version) public static string EditPackage(this UrlHelper url, string id, string version)
Expand All @@ -221,9 +235,10 @@ public static string EditPackage(this UrlHelper url, string id, string version)
public static string DeletePackage(this UrlHelper url, IPackageVersionModel package) public static string DeletePackage(this UrlHelper url, IPackageVersionModel package)
{ {
return url.Action( return url.Action(
actionName: "Delete", actionName: "Delete",
controllerName: "Packages", controllerName: "Packages",
routeValues: new { routeValues: new
{
id = package.Id, id = package.Id,
version = package.Version version = package.Version
}); });
Expand Down Expand Up @@ -252,8 +267,8 @@ public static string ConfirmationUrl(this UrlHelper url, string action, string c
rvd["username"] = username; rvd["username"] = username;
rvd["token"] = token; rvd["token"] = token;
return url.Action( return url.Action(
action, action,
controller, controller,
rvd, rvd,
url.RequestContext.HttpContext.Request.Url.Scheme, url.RequestContext.HttpContext.Request.Url.Scheme,
url.RequestContext.HttpContext.Request.Url.Host); url.RequestContext.HttpContext.Request.Url.Host);
Expand Down
36 changes: 29 additions & 7 deletions src/NuGetGallery/ViewModels/UserProfileModel.cs
@@ -1,22 +1,44 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;


namespace NuGetGallery namespace NuGetGallery
{ {
public class UserProfileModel public class UserProfileModel
{ {
public UserProfileModel() { } public UserProfileModel(User user, List<PackageViewModel> allPackages, int pageIndex, int pageSize, UrlHelper url)

public UserProfileModel(User user)
{ {
Username = user.Username; Username = user.Username;
EmailAddress = user.EmailAddress; EmailAddress = user.EmailAddress;
UnconfirmedEmailAddress = user.UnconfirmedEmailAddress; UnconfirmedEmailAddress = user.UnconfirmedEmailAddress;
AllPackages = allPackages;
TotalPackages = allPackages.Count;
PackagePage = pageIndex;
PackagePageSize = pageSize;

TotalPackageDownloadCount = AllPackages.Sum(p => p.TotalDownloadCount);

PackagePageTotalCount = (TotalPackages + PackagePageSize - 1) / PackagePageSize;

var pager = new PreviousNextPagerViewModel<PackageViewModel>(allPackages, pageIndex, PackagePageTotalCount,
page => url.User(user, page));

Pager = pager;
PagedPackages = AllPackages.Skip(PackagePageSize * pageIndex)
.Take(PackagePageSize).ToList();
} }


public string Username { get; set; } public int PackagePageTotalCount { get; private set; }
public string EmailAddress { get; set; } public string Username { get; private set; }
public string EmailAddress { get; private set; }
public string UnconfirmedEmailAddress { get; set; } public string UnconfirmedEmailAddress { get; set; }
public ICollection<PackageViewModel> Packages { get; set; } public ICollection<PackageViewModel> AllPackages { get; private set; }
public int TotalPackageDownloadCount { get; set; } public ICollection<PackageViewModel> PagedPackages { get; private set; }
public int TotalPackageDownloadCount { get; private set; }
public int TotalPackages { get; private set; }
public int PackagePage { get; private set; }
public int PackagePageSize { get; private set; }
public IPreviousNextPager Pager { get; private set; }

} }
} }
16 changes: 11 additions & 5 deletions src/NuGetGallery/Views/Users/Profiles.cshtml
Expand Up @@ -12,8 +12,8 @@
} }
<div id="stats"> <div id="stats">
<div class="stat"> <div class="stat">
<p class="stat-number">@Model.Packages.Count.ToString("n0")</p> <p class="stat-number">@Model.AllPackages.Count.ToString("n0")</p>
<p class="stat-label">@(Model.Packages.Count == 1 ? "Package" : "Packages")</p> <p class="stat-label">@(Model.AllPackages.Count == 1 ? "Package" : "Packages")</p>
</div> </div>
<div class="stat"> <div class="stat">
<p class="stat-number">@Model.TotalPackageDownloadCount.ToString("n0")</p> <p class="stat-number">@Model.TotalPackageDownloadCount.ToString("n0")</p>
Expand All @@ -24,9 +24,13 @@


<h1 class="page-heading">@Model.Username's Profile</h1> <h1 class="page-heading">@Model.Username's Profile</h1>


<h2>Packages</h2> <h2>Packages
@if (Model.PackagePageTotalCount > 1)
{
<small>(Page @(Model.PackagePage + 1) of @Model.PackagePageTotalCount)</small>
}</h2>
<ul id="searchResults"> <ul id="searchResults">
@foreach (var package in Model.Packages) @foreach (var package in Model.PagedPackages)
{ {
<li> <li>
<section class="package"> <section class="package">
Expand Down Expand Up @@ -59,4 +63,6 @@
</section> </section>
</li> </li>
} }
</ul> </ul>

@ViewHelpers.PreviousNextPager(Model.Pager)

0 comments on commit d25db2e

Please sign in to comment.