|
37 | 37 | NodeImageMapper="n => n.Image" |
38 | 38 | NodeRepulsionMapper="_ => 1200" |
39 | 39 | EdgeSpringConstantMapper="_ => 0.8" |
40 | | - EdgeSpringLengthMapper="_ => 250" |
41 | | - EdgeFromMapper="e => e.from" |
42 | | - EdgeToMapper="e => e.to" |
| 40 | + EdgeSpringLengthMapper="e => e.EdgeLength" |
| 41 | + EdgeFromMapper="e => e.From" |
| 42 | + EdgeToMapper="e => e.To" |
43 | 43 | EdgeWidthMapper="_ => 5" |
44 | 44 | NodeSelectionCallback="async (user) => { selectedUser = user; await InvokeAsync(StateHasChanged); }" /> |
45 | 45 | </div> |
|
94 | 94 |
|
95 | 95 | private async Task AddMoreUsers(User fromUser, int size) |
96 | 96 | { |
| 97 | + selectedUser = null; |
| 98 | + StateHasChanged(); |
| 99 | + |
97 | 100 | var response = await httpClient.GetAsync($"https://kristoffer-strube.dk/API/mastodon/Following/{fromUser.Id}"); |
98 | 101 |
|
99 | 102 | if (!response.IsSuccessStatusCode) |
|
114 | 117 |
|
115 | 118 | users = [.. users, .. allNewUsers]; |
116 | 119 |
|
| 120 | + // Increase distance to this user to make room for new neighbors. |
| 121 | + foreach (var edge in edges.Where(e => e.To.Equals(fromUser) || e.From.Equals(fromUser))) |
| 122 | + { |
| 123 | + edge.EdgeLength = 500; |
| 124 | + } |
| 125 | + |
117 | 126 | foreach (var follow in following) |
118 | 127 | { |
119 | 128 | var newEdge = new Follow(fromUser, follow); |
120 | | - if (!edges.Contains(newEdge)) |
| 129 | + if (!edges.Any(e => e.Equals(newEdge))) |
121 | 130 | { |
122 | | - edges.Add(new Follow(fromUser, follow)); |
| 131 | + edges.Add(newEdge); |
123 | 132 | } |
124 | 133 | } |
125 | 134 |
|
|
152 | 161 |
|
153 | 162 | public override int GetHashCode() => Id.GetHashCode(); |
154 | 163 | } |
155 | | - public record Follow(User from, User to); |
| 164 | + public class Follow(User from, User to) : IEquatable<Follow> |
| 165 | + { |
| 166 | + public User From => from; |
| 167 | + public User To => to; |
| 168 | + |
| 169 | + public float EdgeLength { get; set; } = 250; |
| 170 | + |
| 171 | + public bool Equals(Follow? other) => other is not null && other.From.Equals(From) && other.To.Equals(To); |
| 172 | + } |
156 | 173 |
|
157 | 174 | public void Dispose() |
158 | 175 | { |
|
0 commit comments