@page "/Media/ByUser" @using System.Net.Http.Headers @using System.Reflection @using Spacebar.AdminApi.Models @using Spacebar.AdminAPI.TestClient.Services @using ArcaneLibs.Blazor.Components @inject Config Config @inject ILocalStorageService LocalStorage Uploaded media by user
Displayed columns @foreach (var column in DisplayedColumns) { var value = column.Value; @column.Key.Name
}
@if (UserList is { Count: > 0 }) { @foreach (var user in UserList.OrderByDescending(u => u.Id).Where(x => !x.Deleted)) { } } @{ var columns = DisplayedColumns.Where(kvp => kvp.Value).Select(kvp => kvp.Key).ToList(); } @foreach (var column in columns) { } @foreach (var user in UserMedia) { @foreach (var column in columns) { } }
@column.NameActions
@column.GetValue(user) Delete
@code { private Dictionary DisplayedColumns { get; set; } = typeof(FileMetadataModel).GetProperties() .ToDictionary(p => p, p => p.Name == "Username" || p.Name == "Id" || p.Name == "MessageCount"); private List UserList { get; set; } = new(); private List UserMedia { get; set; } = new(); [SupplyParameterFromQuery(Name = "UserId")] public string? SelectedUserId { get; set { field = value; if (string.IsNullOrWhiteSpace(field)) UserMedia.Clear(); else _ = GetMediaForUser(value!); } } protected override async Task OnInitializedAsync() { using var hc = new HttpClient(); hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Config.AccessToken); var response = await hc.GetAsync(Config.AdminUrl + "/_spacebar/admin/users/"); if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync()); var content = response.Content.ReadFromJsonAsAsyncEnumerable(); await foreach (var user in content) { UserList.Add(user!); StateHasChanged(); } } private async Task GetMediaForUser(string userId) { using var hc = new HttpClient(); hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Config.AccessToken); var response = await hc.GetAsync(Config.AdminUrl + $"/_spacebar/admin/media/user/{userId}/attachments"); if (!response.IsSuccessStatusCode) throw new Exception(await response.Content.ReadAsStringAsync()); var content = response.Content.ReadFromJsonAsAsyncEnumerable(); await foreach (var media in content) { UserMedia.Add(media!); StateHasChanged(); } } }