Skip to content

Commit a4ab87e

Browse files
committed
(#436) wasm: add visibilit checker
1 parent 4947110 commit a4ab87e

File tree

2 files changed

+119
-52
lines changed

2 files changed

+119
-52
lines changed

MiniSpace.Web/src/Astravent.Web.Wasm/Pages/Friends/FriendsSearch.razor

+63-52
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,21 @@
3535
<MudGrid>
3636
@foreach (var student in students)
3737
{
38-
<MudItem xs="12">
39-
<MudPaper Class="p-3 mb-2" Elevation="2" Style="border-radius: 10px; cursor: pointer;" @onclick="() => ViewDetails(student.Id)">
40-
<MudGrid>
41-
<MudItem xs="1" md="1" Class="d-flex justify-content-center align-items-center">
42-
<MudAvatar Image="@GetProfileImageUrl(student.ProfileImageUrl)" Alt="Student Image" Size="Size.Large" Class="border border-primary" />
43-
</MudItem>
44-
<MudItem xs="8" md="8">
45-
<MudText Typo="Typo.h6" Class="mb-0" Style="font-weight: bold;">@($"{student.FirstName} {student.LastName}")</MudText>
46-
@if (student.LastWorkExperience != null)
38+
if (visibilityChecker.ShouldShowProfile(student))
39+
{
40+
<MudItem xs="12">
41+
<MudPaper Class="p-3 mb-2" Elevation="2" Style="border-radius: 10px; cursor: pointer;" @onclick="() => ViewDetails(student.Id)">
42+
<MudGrid>
43+
<MudItem xs="1" md="1" Class="d-flex justify-content-center align-items-center">
44+
<MudAvatar Image="@GetProfileImageUrl(student.ProfileImageUrl)" Alt="Student Image" Size="Size.Large" Class="border border-primary" />
45+
</MudItem>
46+
<MudItem xs="8" md="8">
47+
@if (visibilityChecker.ShouldShowName(student))
48+
{
49+
<MudText Typo="Typo.h6" Class="mb-0" Style="font-weight: bold;">@($"{student.FirstName} {student.LastName}")</MudText>
50+
}
51+
52+
@if (visibilityChecker.ShouldShowWorkPosition(student) && student.LastWorkExperience != null)
4753
{
4854
<MudText Typo="Typo.subtitle2">
4955
@($"{student.LastWorkExperience.Position} in {student.LastWorkExperience.Company}")
@@ -53,49 +59,51 @@
5359
{
5460
<MudText Typo="Typo.subtitle2"> </MudText>
5561
}
56-
</MudItem>
57-
<MudItem xs="2" md="2">
58-
<MudButtonGroup>
59-
@if (student.Id != currentUserId && !(sentRequests?.Any(r => r.InviteeId == student.Id) ?? false) && !(allFriends?.Any(f => f.FriendId == student.Id) ?? false))
60-
{
61-
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="@(e => ConnectWithStudent(student.Id, e))">
62-
<MudIcon Icon="@Icons.Material.Filled.PersonAdd" />
63-
<span class="ml-2">Connect</span>
64-
</MudButton>
65-
}
66-
else if (allFriends?.Any(f => f.FriendId == student.Id) == true)
67-
{
68-
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Success">
69-
<MudIcon Icon="@Icons.Material.Filled.Check" />
70-
<span class="ml-2">Connected</span>
71-
</MudButton>
72-
}
73-
else if (sentRequests?.Any(r => r.InviteeId == student.Id) == true)
74-
{
75-
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Warning">
76-
<MudIcon Icon="@Icons.Material.Filled.HourglassEmpty" />
77-
<span class="ml-2">Pending</span>
78-
</MudButton>
79-
}
80-
else if (incomingRequests?.Any(r => r.InviterId == student.Id) == true)
81-
{
82-
<MudButton Variant="Variant.Outlined" Color="Color.Info">
83-
<MudIcon Icon="@Icons.Material.Filled.QuestionAnswer" />
84-
<span class="ml-2">Respond</span>
85-
</MudButton>
86-
}
87-
else if (student.Id == currentUserId)
88-
{
89-
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Secondary">
90-
<MudIcon Icon="@Icons.Material.Filled.Person" />
91-
<span class="ml-2">It's You</span>
92-
</MudButton>
93-
}
94-
</MudButtonGroup>
95-
</MudItem>
96-
</MudGrid>
97-
</MudPaper>
98-
</MudItem>
62+
</MudItem>
63+
64+
<MudItem xs="2" md="2">
65+
<MudButtonGroup>
66+
@if (student.Id != currentUserId && !(sentRequests?.Any(r => r.InviteeId == student.Id) ?? false) && !(allFriends?.Any(f => f.FriendId == student.Id) ?? false))
67+
{
68+
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="@(e => ConnectWithStudent(student.Id, e))">
69+
<MudIcon Icon="@Icons.Material.Filled.PersonAdd" />
70+
<span class="ml-2">Connect</span>
71+
</MudButton>
72+
}
73+
else if (allFriends?.Any(f => f.FriendId == student.Id) == true)
74+
{
75+
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Success">
76+
<MudIcon Icon="@Icons.Material.Filled.Check" />
77+
<span class="ml-2">Connected</span>
78+
</MudButton>
79+
}
80+
else if (sentRequests?.Any(r => r.InviteeId == student.Id) == true)
81+
{
82+
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Warning">
83+
<MudIcon Icon="@Icons.Material.Filled.HourglassEmpty" />
84+
<span class="ml-2">Pending</span>
85+
</MudButton>
86+
}
87+
else if (incomingRequests?.Any(r => r.InviterId == student.Id) == true)
88+
{
89+
<MudButton Variant="Variant.Outlined" Color="Color.Info">
90+
<MudIcon Icon="@Icons.Material.Filled.QuestionAnswer" />
91+
<span class="ml-2">Respond</span>
92+
</MudButton>
93+
}
94+
else if (student.Id == currentUserId)
95+
{
96+
<MudButton Disabled="true" Variant="Variant.Text" Color="Color.Secondary">
97+
<MudIcon Icon="@Icons.Material.Filled.Person" />
98+
<span class="ml-2">It's You</span>
99+
</MudButton>
100+
}
101+
</MudButtonGroup>
102+
</MudItem>
103+
</MudGrid>
104+
</MudPaper>
105+
</MudItem>
106+
}
99107
}
100108
</MudGrid>
101109
}
@@ -225,6 +233,7 @@
225233
private int pageSize = 10;
226234
private int totalStudents;
227235
private Guid currentUserId;
236+
private VisibilityChecker visibilityChecker;
228237

229238
private List<BreadcrumbItem> _items = new List<BreadcrumbItem>
230239
{
@@ -244,6 +253,8 @@
244253
currentUserId = await IdentityService.GetCurrentUserIdFromJwtAsync();
245254
await LoadFriendRequests();
246255
await LoadStudents();
256+
257+
visibilityChecker = new VisibilityChecker(currentUserId, allFriends);
247258
}
248259
catch (Exception ex)
249260
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using System.Linq;
3+
using Astravent.Web.Wasm.DTO;
4+
using Astravent.Web.Wasm.DTO.Friends;
5+
6+
namespace Astravent.Web.Wasm.Utilities
7+
{
8+
public class VisibilityChecker
9+
{
10+
private readonly Guid _currentUserId;
11+
private readonly IEnumerable<FriendDto> _allFriends;
12+
13+
public VisibilityChecker(Guid currentUserId, IEnumerable<FriendDto> allFriends)
14+
{
15+
_currentUserId = currentUserId;
16+
_allFriends = allFriends;
17+
}
18+
19+
// Method to check if a profile should be visible based on connection visibility
20+
public bool ShouldShowProfile(StudentDto student)
21+
{
22+
var visibility = student.UserSettings.ConnectionVisibility;
23+
return visibility == Visibility.Everyone ||
24+
(visibility == Visibility.Connections && IsConnection(student.Id));
25+
}
26+
27+
// Method to check if the name should be visible
28+
public bool ShouldShowName(StudentDto student)
29+
{
30+
var visibility = student.UserSettings.ConnectionVisibility;
31+
return visibility == Visibility.Everyone ||
32+
(visibility == Visibility.Connections && IsConnection(student.Id));
33+
}
34+
35+
// Method to check if the work position should be visible
36+
public bool ShouldShowWorkPosition(StudentDto student)
37+
{
38+
var visibility = student.UserSettings.WorkPositionVisibility;
39+
return visibility == Visibility.Everyone ||
40+
(visibility == Visibility.Connections && IsConnection(student.Id));
41+
}
42+
43+
// Method to check if education details should be visible
44+
public bool ShouldShowEducation(StudentDto student)
45+
{
46+
var visibility = student.UserSettings.EducationVisibility;
47+
return visibility == Visibility.Everyone ||
48+
(visibility == Visibility.Connections && IsConnection(student.Id));
49+
}
50+
51+
private bool IsConnection(Guid studentId)
52+
{
53+
return _allFriends.Any(f => f.FriendId == studentId);
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)