Skip to content

Commit fa6ae9c

Browse files
author
Scott Bommarito
authored
ManagePackageViewModel should not be dependent on DisplayPackageViewModel (#6900)
1 parent 8989c7c commit fa6ae9c

6 files changed

Lines changed: 85 additions & 49 deletions

File tree

src/NuGetGallery.Core/NuGetVersionExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4-
using System;
54
using System.Text.RegularExpressions;
65
using NuGet.Versioning;
76

@@ -20,7 +19,7 @@ public static string Normalize(string version)
2019
return parsed.ToNormalizedString();
2120
}
2221

23-
public static string ToFullStringOrFallback(string version, string fallback = "")
22+
public static string ToFullString(string version)
2423
{
2524
NuGetVersion nugetVersion;
2625
if (NuGetVersion.TryParse(version, out nugetVersion))
@@ -29,7 +28,7 @@ public static string ToFullStringOrFallback(string version, string fallback = ""
2928
}
3029
else
3130
{
32-
return fallback;
31+
return version;
3332
}
3433
}
3534
}

src/NuGetGallery/Scripts/gallery/page-edit-readme.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@
3131
}
3232

3333
var version = _viewModel.Versions[selectedVersion];
34-
var cachedReadMe = version.readMe;
34+
var cachedReadMe = version.ReadMe;
3535
if (cachedReadMe === null) {
36-
var url = version.getReadMe;
36+
var url = version.GetReadMeUrl;
3737
$.ajax({
3838
url: url,
3939
type: 'GET',
4040
statusCode: {
4141
200: function (data) {
42-
version.readMe = data;
42+
version.ReadMe = data;
4343
_viewModel.Edit = data;
4444
bindData(_viewModel);
4545
},
@@ -89,7 +89,7 @@
8989
return;
9090
}
9191

92-
var url = _viewModel.Versions[selectedVersion].submit;
92+
var url = _viewModel.Versions[selectedVersion].SubmitUrl;
9393
$.ajax({
9494
url: url,
9595
type: 'POST',

src/NuGetGallery/ViewModels/ManagePackageViewModel.cs

Lines changed: 74 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace NuGetGallery
1212
{
13-
public class ManagePackageViewModel : DisplayPackageViewModel
13+
public class ManagePackageViewModel : ListPackageItemViewModel
1414
{
1515
public ManagePackageViewModel(Package package, User currentUser, IReadOnlyList<ReportPackageReason> reasons, UrlHelper url, string readMe)
1616
: base(package, currentUser)
@@ -32,18 +32,50 @@ public ManagePackageViewModel(Package package, User currentUser, IReadOnlyList<R
3232

3333
IsLocked = package.PackageRegistration.IsLocked;
3434

35-
var versionSelectPackages = PackageVersions.Where(p => !p.Deleted);
35+
var versionSelectPackages = package.PackageRegistration.Packages
36+
.Where(p => p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating)
37+
.OrderByDescending(p => new NuGetVersion(p.Version))
38+
.ToList();
39+
40+
var versionSelectListItems = new List<SelectListItem>();
41+
VersionListedStateDictionary = new Dictionary<string, VersionListedState>();
42+
VersionReadMeStateDictionary = new Dictionary<string, VersionReadMeState>();
43+
var submitUrlTemplate = url.PackageVersionActionTemplate("Edit");
44+
var getReadMeUrlTemplate = url.PackageVersionActionTemplate("GetReadMeMd");
45+
string defaultSelectedVersion = null;
46+
foreach (var versionSelectPackage in versionSelectPackages)
47+
{
48+
var text = NuGetVersionFormatter.ToFullString(versionSelectPackage.Version) + (versionSelectPackage.IsLatestSemVer2 ? " (Latest)" : string.Empty);
49+
var value = NuGetVersionFormatter.Normalize(versionSelectPackage.Version);
50+
versionSelectListItems.Add(new SelectListItem
51+
{
52+
Text = text,
53+
Value = value
54+
});
55+
56+
if (versionSelectPackage == package)
57+
{
58+
defaultSelectedVersion = value;
59+
}
60+
61+
VersionListedStateDictionary.Add(
62+
value,
63+
new VersionListedState(versionSelectPackage));
64+
65+
var model = new TrivialPackageVersionModel(versionSelectPackage);
66+
VersionReadMeStateDictionary.Add(
67+
value,
68+
new VersionReadMeState(
69+
submitUrlTemplate.Resolve(model),
70+
getReadMeUrlTemplate.Resolve(model),
71+
null));
72+
}
73+
3674
VersionSelectList = new SelectList(
37-
PackageVersions
38-
.Where(p => !p.Deleted && !p.FailedValidation)
39-
.Select(p => new SelectListItem
40-
{
41-
Text = p.FullVersion + (p.LatestVersionSemVer2 ? " (Latest)" : string.Empty),
42-
Value = p.Version
43-
}),
44-
"Value",
45-
"Text",
46-
Version);
75+
versionSelectListItems,
76+
nameof(SelectListItem.Value),
77+
nameof(SelectListItem.Text),
78+
defaultSelectedVersion);
4779

4880
// Update edit model with the readme.md data.
4981
ReadMe = new EditPackageVersionReadMeRequest();
@@ -63,5 +95,35 @@ public ManagePackageViewModel(Package package, User currentUser, IReadOnlyList<R
6395
public bool IsLocked { get; }
6496

6597
public EditPackageVersionReadMeRequest ReadMe { get; set; }
98+
99+
public Dictionary<string, VersionListedState> VersionListedStateDictionary { get; set; }
100+
101+
public Dictionary<string, VersionReadMeState> VersionReadMeStateDictionary { get; set; }
102+
103+
public class VersionListedState
104+
{
105+
public VersionListedState(Package package)
106+
{
107+
Listed = package.Listed;
108+
DownloadCount = package.DownloadCount;
109+
}
110+
111+
public bool Listed { get; set; }
112+
public int DownloadCount { get; set; }
113+
}
114+
115+
public class VersionReadMeState
116+
{
117+
public VersionReadMeState(string submitUrl, string getReadMeUrl, string readMe)
118+
{
119+
SubmitUrl = submitUrl;
120+
GetReadMeUrl = getReadMeUrl;
121+
ReadMe = readMe;
122+
}
123+
124+
public string SubmitUrl { get; set; }
125+
public string GetReadMeUrl { get; set; }
126+
public string ReadMe { get; set; }
127+
}
66128
}
67129
}

src/NuGetGallery/ViewModels/PackageViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public PackageViewModel(Package package)
1919
{
2020
_package = package ?? throw new ArgumentNullException(nameof(package));
2121

22-
FullVersion = NuGetVersionFormatter.ToFullStringOrFallback(package.Version, fallback: package.Version);
22+
FullVersion = NuGetVersionFormatter.ToFullString(package.Version);
2323
IsSemVer2 = package.SemVerLevelKey == SemVerLevelKey.SemVer2;
2424

2525
Version = String.IsNullOrEmpty(package.NormalizedVersion) ?

src/NuGetGallery/Views/Packages/Manage.cshtml

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -59,37 +59,12 @@
5959
var strings_RemovingSelf = "@Html.Raw(Strings.ManagePackageOwners_RemovingSelf)";
6060
6161
// Set up delete section
62-
var versionListedState = @Html.Raw(
63-
Json.Encode(
64-
Model.VersionSelectList.ToDictionary(
65-
v => v.Value,
66-
v =>
67-
{
68-
var version = Model.PackageVersions.Single(p => p.Version == v.Value);
69-
return new
70-
{
71-
version.Listed,
72-
version.DownloadCount
73-
};
74-
})));
62+
var versionListedState = @Html.Raw(Json.Encode(Model.VersionListedStateDictionary));
7563
7664
$(function () {
7765
// Set up documentation section
78-
@{
79-
var editTemplate = Url.PackageVersionActionTemplate("Edit");
80-
var getReadMeTemplate = Url.PackageVersionActionTemplate("GetReadMeMd");
81-
}
82-
8366
var readMeModel = {
84-
"Versions": @Html.Raw(Json.Encode(Model.VersionSelectList.ToDictionary(v => v.Value, v => {
85-
var pvmodel = new TrivialPackageVersionModel(Model.Id, v.Value);
86-
return new
87-
{
88-
submit = editTemplate.Resolve(pvmodel),
89-
getReadMe = getReadMeTemplate.Resolve(pvmodel),
90-
readMe = (EditPackageVersionReadMeRequest)null
91-
};
92-
}))),
67+
"Versions": @Html.Raw(Json.Encode(Model.VersionReadMeStateDictionary)),
9368
"Edit": @Html.Raw(Json.Encode(Model.ReadMe))
9469
};
9570

tests/NuGetGallery.Facts/Services/PackageServiceFacts.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,10 +1366,10 @@ public virtual void ReturnsCorrectLatestVersionForMixedSemVer2AndNonSemVer2Packa
13661366
var packages = InvokeFindPackagesByOwner(currentUser, includeUnlisted: true).ToList();
13671367

13681368
var nugetCatalogReaderPackage = packages.Single(p => p.PackageRegistration.Id == "NuGet.CatalogReader");
1369-
Assert.Equal("1.5.12+git.78e44a8", NuGetVersionFormatter.ToFullStringOrFallback(nugetCatalogReaderPackage.Version, fallback: nugetCatalogReaderPackage.Version));
1369+
Assert.Equal("1.5.12+git.78e44a8", NuGetVersionFormatter.ToFullString(nugetCatalogReaderPackage.Version));
13701370

13711371
var sleetLibPackage = packages.Single(p => p.PackageRegistration.Id == "SleetLib");
1372-
Assert.Equal("2.2.24+git.f2a0cb6", NuGetVersionFormatter.ToFullStringOrFallback(sleetLibPackage.Version, fallback: sleetLibPackage.Version));
1372+
Assert.Equal("2.2.24+git.f2a0cb6", NuGetVersionFormatter.ToFullString(sleetLibPackage.Version));
13731373
}
13741374

13751375
protected FakeEntitiesContext GetMixedVersioningPackagesContext(User currentUser, User packageOwner)

0 commit comments

Comments
 (0)