Skip to content

Commit bb5c7d2

Browse files
committed
chore: centralize member tag display logic
1 parent d84d140 commit bb5c7d2

6 files changed

Lines changed: 58 additions & 24 deletions

File tree

SgfDevs/Controllers/DevsApiController.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class DevsApiController : Controller
3535
private MediaUrlGeneratorCollection _mediaUrlGeneratorCollection;
3636
private NewsletterHelper _newsletterHelper;
3737
private readonly MemberConverter _memberConverter;
38+
private readonly MemberTagDisplayService _memberTagDisplayService;
3839

3940

4041
public DevsApiController(
@@ -49,7 +50,8 @@ public DevsApiController(
4950
IContentTypeBaseServiceProvider contentTypeBaseServiceProvider,
5051
MediaUrlGeneratorCollection mediaUrlGeneratorCollection,
5152
NewsletterHelper newsletterHelper,
52-
MemberConverter memberConverter
53+
MemberConverter memberConverter,
54+
MemberTagDisplayService memberTagDisplayService
5355
)
5456
{
5557
_directoryHelper = directoryHelper;
@@ -64,6 +66,7 @@ MemberConverter memberConverter
6466
_mediaUrlGeneratorCollection = mediaUrlGeneratorCollection;
6567
_newsletterHelper = newsletterHelper;
6668
_memberConverter = memberConverter;
69+
_memberTagDisplayService = memberTagDisplayService;
6770
}
6871

6972
// GET
@@ -101,12 +104,11 @@ public IActionResult GetSearch()
101104
{
102105
var searcher = index.Searcher;
103106
var skillsQs = HttpContext.Request.Query["skills"].ToString();
104-
var allMemberTags = _directoryHelper.GetMemberTags();
105107
// Send back all the members if no params are set
106108
if (string.IsNullOrEmpty(skillsQs))
107109
{
108110
var allMembers = _directoryHelper.GetAllMembers()
109-
.Select(member => BuildDirectoryResult(member, allMemberTags));
111+
.Select(BuildDirectoryResult);
110112

111113
return Ok(allMembers);
112114
}
@@ -122,7 +124,7 @@ public IActionResult GetSearch()
122124
var ids = results.Select(result => int.Parse(result.Id)).ToArray();
123125

124126
var filteredMembers = _memberService.GetAllMembers(ids)
125-
.Select(member => BuildDirectoryResult(member, allMemberTags))
127+
.Select(BuildDirectoryResult)
126128
.OrderBy(m => m.Name);
127129

128130
return Ok(filteredMembers);
@@ -195,7 +197,7 @@ public async Task<IActionResult> NewsletterSignUp([FromForm] string email, [From
195197
return Ok();
196198
}
197199

198-
private DirectoryResult BuildDirectoryResult(IMember umbracoMember, List<Tag> allMemberTags)
200+
private DirectoryResult BuildDirectoryResult(IMember umbracoMember)
199201
{
200202
var member = _memberConverter.FromMember(umbracoMember);
201203
var url = "/member/" + member.Username;
@@ -207,15 +209,13 @@ private DirectoryResult BuildDirectoryResult(IMember umbracoMember, List<Tag> al
207209
image = member.ProfileImage.GetCropUrl(width: 500);
208210
}
209211

210-
var memberTags = member.MemberTags?.Cast<Tag>().ToList() ?? [];
211-
212212
return new DirectoryResult
213213
{
214214
Name = member.Name,
215215
Location = location,
216216
Image = image,
217217
Url = url,
218-
Tags = memberTags.Select(t => !string.IsNullOrWhiteSpace(t.DisplayName) ? t.DisplayName : t.Name)
218+
Tags = _memberTagDisplayService.GetDisplayMemberTags(member)
219219
};
220220
}
221221
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Umbraco.Cms.Web.Common.PublishedModels;
5+
6+
namespace SgfDevs.Dev;
7+
8+
public class MemberTagDisplayService
9+
{
10+
public IReadOnlyList<string> GetDisplayMemberTags(Member member)
11+
{
12+
var tags = member?.MemberTags?.OfType<Tag>() ?? [];
13+
return GetDisplayMemberTags(tags);
14+
}
15+
16+
public IReadOnlyList<string> GetDisplayMemberTags(IEnumerable<Tag> tags)
17+
{
18+
return (tags ?? [])
19+
.Select(GetDisplayName)
20+
.Where(tagName => !string.IsNullOrWhiteSpace(tagName))
21+
.Distinct(StringComparer.OrdinalIgnoreCase)
22+
.ToList();
23+
}
24+
25+
private static string GetDisplayName(Tag tag)
26+
{
27+
return !string.IsNullOrWhiteSpace(tag?.DisplayName) ? tag.DisplayName : tag?.Name;
28+
}
29+
}

SgfDevs/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
builder.Services.AddHttpClient();
4545
builder.Services.AddScoped<MemberConverter>();
46+
builder.Services.AddScoped<MemberTagDisplayService>();
4647
builder.Services.AddScoped<DirectoryHelper>();
4748
builder.Services.AddScoped<NewsletterHelper>();
4849

SgfDevs/Views/Group.cshtml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<ContentModels.Group>
44
@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;
55
@inject MemberConverter _memberConverter;
6+
@inject MemberTagDisplayService _memberTagDisplayService;
67
@{
78
var upcomingPresentations = Umbraco.ContentAtRoot().First().Descendants<Presentation>().Where(p => p.Group.Id == Model.Id);
89
var leaders = (Model.Leaders ?? []).ToArray();
@@ -186,15 +187,15 @@
186187
}
187188

188189
var presenter = _memberConverter.FromContent(presenterContent);
189-
var isFoundingMember = presenter.MemberTags?.Cast<Tag>().Any(tag => tag.Name.Equals("founding member", StringComparison.OrdinalIgnoreCase)) ?? false;
190+
var presenterMemberTags = _memberTagDisplayService.GetDisplayMemberTags(presenter);
190191
var presenterImage = presenter.ProfileImage?.GetCropUrl(width: 960) ?? "/images/pipey.jpg";
191192
<div class="card company_card">
192193
<figure>
193194
<img src="@presenterImage" alt="@presenter.Name">
194195
<figcaption>
195-
@if (isFoundingMember)
196+
@foreach (var tagName in presenterMemberTags)
196197
{
197-
<div>Founding Sponsor</div>
198+
<div>@tagName</div>
198199
}
199200
</figcaption>
200201
</figure>
@@ -224,12 +225,12 @@
224225
<div class="cards grid">
225226
@foreach (var leader in leaders.Select(c => _memberConverter.FromContent(c)))
226227
{
227-
var memberTags = leader.HasValue("MemberTags") ? leader.MemberTags?.Cast<Tag>().ToList() ?? [] : [];
228+
var memberTags = _memberTagDisplayService.GetDisplayMemberTags(leader);
228229
<div class="card company_card">
229230
<figure>
230231
<img src="@leader.ProfileImage.GetCropUrl(width: 960)" alt="@leader.Name">
231232
<figcaption>
232-
@foreach (var tagName in memberTags.Select(tag => !string.IsNullOrWhiteSpace(tag.DisplayName) ? tag.DisplayName : tag.Name))
233+
@foreach (var tagName in memberTags)
233234
{
234235
<div>@tagName</div>
235236
}

SgfDevs/Views/Home.cshtml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
@using SGFDevs.Dev
55
@using SgfDevs.Extensions
66
@using Umbraco.Cms.Core
7-
@using Umbraco.Cms.Web.Common
8-
@inject DirectoryHelper _directoryHelper;
9-
@inject UmbracoHelper _helper;
10-
@inject MemberConverter _memberConverter;
7+
@using Umbraco.Cms.Web.Common
8+
@inject DirectoryHelper _directoryHelper;
9+
@inject UmbracoHelper _helper;
10+
@inject MemberConverter _memberConverter;
11+
@inject MemberTagDisplayService _memberTagDisplayService;
1112

1213
@{
1314
Layout = "_Layout";
@@ -168,7 +169,7 @@
168169
var url = "/member/" + member.Username;
169170
var location = member.City + ", " + member.State;
170171
var image = "/images/pipey.jpg";
171-
var memberTags = member.MemberTags?.Cast<Tag>().ToList() ?? [];
172+
var memberTags = _memberTagDisplayService.GetDisplayMemberTags(member);
172173

173174
if(member.ProfileImage != null)
174175
{
@@ -179,10 +180,10 @@
179180
<figure>
180181
<a href="@url"><img src="@image" alt="@member.Name"></a>
181182
<figcaption>
182-
@foreach (var tagName in memberTags.Select(t => !string.IsNullOrWhiteSpace(t.DisplayName) ? t.DisplayName : t.Name))
183-
{
184-
<div>@tagName</div>
185-
}
183+
@foreach (var tagName in memberTags)
184+
{
185+
<div>@tagName</div>
186+
}
186187
</figcaption>
187188
</figure>
188189

SgfDevs/Views/Member/MemberProfile.cshtml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
@model Umbraco.Cms.Web.Common.PublishedModels.Member
2+
@using SgfDevs.Dev
23
@using Tag = Umbraco.Cms.Web.Common.PublishedModels.Tag;
4+
@inject MemberTagDisplayService _memberTagDisplayService;
35

46
@{
57
var name = Model.FirstName + " " + Model.LastName;
68
var image = Model.ProfileImage != null ? Model.ProfileImage.GetCropUrl(width: 800) : "/images/pipey.jpg";
7-
var memberTags = Model.HasValue("MemberTags") ? Model.MemberTags?.Cast<Tag>().ToList() ?? [] : [];
9+
var memberTags = _memberTagDisplayService.GetDisplayMemberTags(Model);
810
var joinDate = (Model.GetProperty("CreateDate")?.GetValue() as DateTime?)?.ToString("MMMM yyyy");
911
string url = null;
1012
string urlDisplay = null;
@@ -45,7 +47,7 @@
4547
<img src="@image" alt="@name"/>
4648
</figure>
4749
<figcaption>
48-
@foreach (var tagName in memberTags.Select(tag => !string.IsNullOrWhiteSpace(tag.DisplayName) ? tag.DisplayName : tag.Name))
50+
@foreach (var tagName in memberTags)
4951
{
5052
<div>@tagName</div>
5153
}

0 commit comments

Comments
 (0)