@inherits LocalizableComponentBase @* The feed page's tabs, one per kind of feed, scrolling sideways on narrow screens. Groups adds a choice of the persona's communities and circles, Tag the hashtag being followed. The stats icon shows how the current feed was read; the buttons on the right open the composer and, on narrow screens, the globe. *@
@foreach (var type in Types) {
}
@if (Filter.TimelineType is TimelineType.Groups) { @if (Groups.Count == 0) {

@Localizer["This persona is in no community or circle yet."]

} else { @foreach (var group in Groups) { } } } else if (Filter.TimelineType is TimelineType.Tag) {

#@Filter.Tag

}
@code { [Parameter, EditorRequired] public FeedFilter Filter { get; set; } [Parameter] public List Groups { get; set; } = []; [Parameter] public IEnumerable Stats { get; set; } = []; [Parameter] public bool IsComposing { get; set; } [Parameter] public EventCallback OnCompose { get; set; } /// Raised after Filter changed (tab, group or globe). [Parameter] public EventCallback OnChanged { get; set; } static readonly TimelineType[] Always = [ TimelineType.Home, TimelineType.Local, TimelineType.Federation, TimelineType.Nearby, TimelineType.Groups, TimelineType.Direct, TimelineType.Notifications, TimelineType.Favourites, TimelineType.Bookmarks ]; List Types => Filter.Tag is { Length: > 0 } ? [.. Always, TimelineType.Tag] : [.. Always]; int ActiveIndex => Types.IndexOf(Filter.TimelineType); ViewGroup SelectedGroup => Groups.FirstOrDefault(g => g.Id == Filter.GroupId); protected override void OnInitialized() => IsLoading = false; string TabName(TimelineType type) => type switch { TimelineType.Federation => Localizer["Federated"], TimelineType.Tag => "#" + Filter.Tag, _ => Localizer[type.ToString()] }; async Task Select(int index) { Filter.TimelineType = Types[index]; if (Filter.TimelineType is TimelineType.Groups && SelectedGroup is null) Filter.GroupId = Groups.FirstOrDefault()?.Id; await OnChanged.InvokeAsync(Filter); } async Task SelectGroup(string groupId) { Filter.GroupId = groupId; await OnChanged.InvokeAsync(Filter); } async Task ToggleGlobe() { Filter.ShowGlobe = !Filter.ShowGlobe; await OnChanged.InvokeAsync(Filter); } }