@page "/{User}" @using Iceshrimp.Frontend.Core.Miscellaneous @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Shared.Schemas @using Iceshrimp.Frontend.Components @using Iceshrimp.Frontend.Components.Note @using System.Text.RegularExpressions @inject ApiService Api @if (_init) {
@UserResponse.DisplayName
@@@UserResponse.Username @if (UserResponse.Host != null) { var host = $"@{UserResponse.Host}"; @host }
@if (UserNotes.Count > 0) {
@foreach (var note in UserNotes) {
}
}
} @if (_loading) {
loading
} @if (_notFound) {
User does not exist!
} @if (_error) {
Failure
} @code { [Parameter] public string? User { get; set; } [Parameter] public string? Host { get; set; } private UserResponse UserResponse { get; set; } = null!; private UserProfileResponse? Profile { get; set; } private string? MinId { get; set; } private List UserNotes { get; set; } = []; private bool _loading = true; private bool _init; private bool _notFound; private bool _error; private bool _fetchLock; private async Task GetNotes(string? minId) { var pq = new PaginationQuery() { Limit = 10, MaxId = minId }; var notes = await Api.Users.GetUserNotes(UserResponse.Id, pq); if (notes is not null && notes.Count > 0) { MinId = notes.Last().Id; UserNotes.AddRange(notes); StateHasChanged(); } } private async Task AddNotes() { if (_fetchLock == false) { _fetchLock = true; await GetNotes(MinId); _fetchLock = false; } } private async Task LoadProfile() { try { if (User is null) { _notFound = true; } else { var pattern = "^@(.[^@]+)@?(.+)?$"; var matches = Regex.Match(User, pattern); var userResponse = await Api.Users.LookupUser(matches.Groups[1].Value, matches.Groups[2].Value); if (userResponse is null) { _notFound = true; } else { UserResponse = userResponse; Profile = await Api.Users.GetUserProfile(UserResponse.Id); await GetNotes(null); _init = true; _loading = false; } } } catch (ApiException) { _loading = false; _error = true; } } protected override async Task OnInitializedAsync() { await LoadProfile(); } protected override async Task OnParametersSetAsync() { _init = false; _loading = true; UserNotes = []; MinId = null; Profile = null; StateHasChanged(); await LoadProfile(); } }