@page "/mod/emojis/remote" @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Iceshrimp.Frontend.Components @using Microsoft.AspNetCore.Components.Sections @using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Miscellaneous @using Iceshrimp.Shared.Schemas.Web @attribute [Authorize(Roles = "moderator")] @layout ModerationLayout @inject ApiService Api; @inject IStringLocalizer Loc; @Loc["Remote Emojis"] @if (State is not State.Loading) { @Loc["Local"] } @if (State is State.Empty or State.Error or State.Loaded) { } @if (State is State.Loaded) {
@foreach (var emoji in Emojis) { }
@if (PaginationData is { Next: not null }) { } } @if (State is State.Empty) { @Loc["No emojis were found"] } @if (State is State.Loading) {
} @code { private List Emojis { get; set; } = []; private string EmojiFilter { get; set; } = ""; private string HostFilter { get; set; } = ""; private State State { get; set; } private PaginationData? PaginationData { get; set; } private async Task Search() { State = State.Loading; var res = await Api.Emoji.GetRemoteEmojiAsync(string.IsNullOrWhiteSpace(EmojiFilter) ? null : EmojiFilter.ToLower().Replace(" ", ""), string.IsNullOrWhiteSpace(HostFilter) ? null : HostFilter.ToLower().Replace(" ", ""), new PaginationQuery()); PaginationData = res.Links; Emojis = res.Data; State = Emojis.Count == 0 ? State.Empty : State.Loaded; StateHasChanged(); } private async Task FetchMore() { if (PaginationData?.Next == null) return; var pq = new PaginationQuery { MaxId = PaginationData.Next?.Split('=')[1], Limit = PaginationData.Limit }; var res = await Api.Emoji.GetRemoteEmojiAsync(string.IsNullOrWhiteSpace(EmojiFilter) ? null : EmojiFilter.ToLower().Replace(" ", ""), string.IsNullOrWhiteSpace(HostFilter) ? null : HostFilter.ToLower().Replace(" ", ""), pq); PaginationData = res.Links; Emojis.AddRange(res.Data); StateHasChanged(); } protected override async Task OnInitializedAsync() { await Search(); } }