Skip to content

Commit 5b084ed

Browse files
Add ability to view referral count
1 parent 50f6e92 commit 5b084ed

File tree

8 files changed

+88
-14
lines changed

8 files changed

+88
-14
lines changed

Directory.Packages.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,22 @@
1616
<PackageVersion Include="ContentFeedNuget" Version="$(ToolingPackagesVersion)" />
1717
</ItemGroup>
1818
<ItemGroup>
19-
<PackageVersion Include="Azure.Identity" Version="1.12.1" />
20-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
21-
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
22-
<PackageVersion Include="EssentialCSharp.Shared.Models" Version="$(ToolingPackagesVersion)" />
2319
<PackageVersion Include="AspNet.Security.OAuth.GitHub" Version="8.3.0" />
20+
<PackageVersion Include="Azure.Identity" Version="1.12.1" />
2421
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
22+
<PackageVersion Include="EssentialCSharp.Shared.Models" Version="$(ToolingPackagesVersion)" />
2523
<PackageVersion Include="HtmlAgilityPack" Version="1.11.72" />
2624
<PackageVersion Include="IntelliTect.Multitool" Version="1.5.3" />
2725
<PackageVersion Include="Mailjet.Api" Version="3.0.0" />
2826
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="8.0.12" />
27+
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="9.0.1" />
2928
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" />
3029
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.12" />
3130
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.12" />
3231
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.12" />
3332
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.8" />
33+
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
34+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
3435
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.10" />
3536
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
3637
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.10" />

EssentialCSharp.Web/Areas/Identity/Pages/Account/Manage/Index.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ ViewData["ActivePage"] = ManageNavPages.Index;
3232
<input asp-for="Input.PhoneNumber" class="form-control" placeholder="Please enter your phone number." />
3333
<label asp-for="Input.PhoneNumber" class="form-label"></label>
3434
<span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
35-
</div>
35+
</div>
3636
<button id="update-profile-button" type="submit" class="w-100 btn btn-lg btn-primary">Save</button>
3737
</form>
3838
</div>

EssentialCSharp.Web/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class IndexModel(
1515
public string? FirstName { get; set; }
1616
public string? LastName { get; set; }
1717

18+
public int ReferralCount { get; set; }
19+
1820
[TempData]
1921
public string? StatusMessage { get; set; }
2022

@@ -46,6 +48,7 @@ private async Task LoadAsync(EssentialCSharpWebUser user)
4648
{
4749
string? userName = await userManager.GetUserNameAsync(user);
4850
string? phoneNumber = await userManager.GetPhoneNumberAsync(user);
51+
ReferralCount = user.ReferralCount;
4952

5053
Input = new InputModel
5154
{

EssentialCSharp.Web/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public static class ManageNavPages
2424

2525
public static string TwoFactorAuthentication => "TwoFactorAuthentication";
2626

27+
public static string Referrals => "Referrals";
28+
2729
public static string? IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index);
2830

2931
public static string? EmailNavClass(ViewContext viewContext) => PageNavClass(viewContext, Email);
@@ -40,6 +42,8 @@ public static class ManageNavPages
4042

4143
public static string? TwoFactorAuthenticationNavClass(ViewContext viewContext) => PageNavClass(viewContext, TwoFactorAuthentication);
4244

45+
public static string? ReferralsNavClass(ViewContext viewContext) => PageNavClass(viewContext, Referrals);
46+
4347
public static string? PageNavClass(ViewContext viewContext, string page)
4448
{
4549
string? activePage = viewContext.ViewData["ActivePage"] as string
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@page
2+
@model ReferralsDataModel
3+
@{
4+
ViewData["Title"] = "Referrals";
5+
ViewData["ActivePage"] = ManageNavPages.Referrals;
6+
}
7+
8+
<h3>@ViewData["Title"]</h3>
9+
10+
<div class="row">
11+
<div class="col-md-6">
12+
<p>
13+
You have <strong>@Model.ReferralCount</strong> referrals.
14+
</p>
15+
</div>
16+
17+
@section Scripts {
18+
<partial name="_ValidationScriptsPartial" />
19+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using EssentialCSharp.Web.Areas.Identity.Data;
2+
using Microsoft.AspNetCore.Identity;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.AspNetCore.Mvc.RazorPages;
5+
6+
namespace EssentialCSharp.Web.Areas.Identity.Pages.Account.Manage;
7+
8+
public class ReferralsDataModel : PageModel
9+
{
10+
private readonly UserManager<EssentialCSharpWebUser> _UserManager;
11+
private readonly ILogger<ReferralsDataModel> _Logger;
12+
13+
public int ReferralCount { get; set; }
14+
15+
public ReferralsDataModel(
16+
UserManager<EssentialCSharpWebUser> userManager,
17+
ILogger<ReferralsDataModel> logger)
18+
{
19+
_UserManager = userManager;
20+
_Logger = logger;
21+
}
22+
23+
public async Task<IActionResult> OnGetAsync()
24+
{
25+
EssentialCSharpWebUser? user = await _UserManager.GetUserAsync(User);
26+
if (user is null)
27+
{
28+
return NotFound($"Unable to load user with ID '{_UserManager.GetUserId(User)}'.");
29+
}
30+
ReferralCount = user.ReferralCount;
31+
32+
return Page();
33+
}
34+
}

EssentialCSharp.Web/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
var hasExternalLogins = (await SignInManager.GetExternalAuthenticationSchemesAsync()).Any();
44
}
55
<ul class="nav nav-pills flex-column">
6-
<li class="nav-item"><a class="nav-link @ManageNavPages.IndexNavClass(ViewContext)" id="profile" asp-page="./Index">Profile</a></li>
7-
<li class="nav-item"><a class="nav-link @ManageNavPages.EmailNavClass(ViewContext)" id="email" asp-page="./Email">Email</a></li>
8-
<li class="nav-item"><a class="nav-link @ManageNavPages.ChangePasswordNavClass(ViewContext)" id="change-password" asp-page="./ChangePassword">Password</a></li>
6+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.IndexNavClass(ViewContext)" id="profile" asp-page="./Index">Profile</a></li>
7+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.EmailNavClass(ViewContext)" id="email" asp-page="./Email">Email</a></li>
8+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.ChangePasswordNavClass(ViewContext)" id="change-password" asp-page="./ChangePassword">Password</a></li>
99
@if (hasExternalLogins)
1010
{
11-
<li id="external-logins" class="nav-item"><a id="external-login" class="nav-link @ManageNavPages.ExternalLoginsNavClass(ViewContext)" asp-page="./ExternalLogins">External logins</a></li>
11+
<li id="external-logins" class="nav-item"><a id="external-login" class="account-nav-link @ManageNavPages.ExternalLoginsNavClass(ViewContext)" asp-page="./ExternalLogins">External logins</a></li>
1212
}
13-
<li class="nav-item"><a class="nav-link @ManageNavPages.TwoFactorAuthenticationNavClass(ViewContext)" id="two-factor" asp-page="./TwoFactorAuthentication">Two-factor authentication</a></li>
14-
<li class="nav-item"><a class="nav-link @ManageNavPages.PersonalDataNavClass(ViewContext)" id="personal-data" asp-page="./PersonalData">Personal data</a></li>
13+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.TwoFactorAuthenticationNavClass(ViewContext)" id="two-factor" asp-page="./TwoFactorAuthentication">Two-factor authentication</a></li>
14+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.ReferralsNavClass(ViewContext)" id="referrals" asp-page="./Referrals">Referrals</a></li>
15+
<li class="nav-item"><a class="account-nav-link @ManageNavPages.PersonalDataNavClass(ViewContext)" id="personal-data" asp-page="./PersonalData">Personal data</a></li>
1516
</ul>

EssentialCSharp.Web/wwwroot/css/styles.css

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,18 @@ a:hover {
305305
color: var(--primary-accent-color);
306306
}
307307

308+
.account-nav-link {
309+
color: black;
310+
}
311+
312+
.account-nav-link:hover {
313+
color: var(--primary-accent-color);
314+
}
315+
316+
.account-nav-item .active {
317+
color: var(--primary-accent-color);
318+
}
319+
308320
/* Page Navigation Arrow Buttons */
309321

310322
.turn-page {
@@ -809,9 +821,9 @@ details > summary::-webkit-details-marker {
809821

810822
.nav-pills .nav-link.active,
811823
.nav-pills .show > .nav-link {
812-
color: #fff;
813-
background-color: #1b6ec2;
814-
border-color: #1861ac;
824+
color: #fff;
825+
background-color: #1b6ec2;
826+
border-color: #1861ac;
815827
}
816828

817829
button.accept-policy {

0 commit comments

Comments
 (0)