| File: Utils\FilterHelpers.cs | Web Access |
| Project: src\src\Aspire.Dashboard\Aspire.Dashboard.csproj (Aspire.Dashboard) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Dashboard.Components.Layout; using Aspire.Dashboard.Components.Pages; using Aspire.Dashboard.Model; using Aspire.Dashboard.Model.Otlp; using Aspire.Dashboard.Resources; using Microsoft.Extensions.Localization; using Icons = Microsoft.FluentUI.AspNetCore.Components.Icons; namespace Aspire.Dashboard.Utils; public static class FilterHelpers { public static IEnumerable<TelemetryFilter> GetEnabledFilters(this IEnumerable<TelemetryFilter> filters) { return filters.Where(filter => filter.Enabled); } public static List<MenuButtonItem> GetFilterMenuItems<TView, TR>( this IPageWithSessionAndUrlState<TView, TR> page, IReadOnlyList<FieldTelemetryFilter> filters, Action clearFilters, Func<FieldTelemetryFilter, Task> openFilterAsync, IStringLocalizer<StructuredFiltering> filterLoc, IStringLocalizer<Dialogs> dialogsLoc, AspirePageContentLayout? contentLayout) where TR : class { var filterMenuItems = new List<MenuButtonItem>(); foreach (var filter in filters) { filterMenuItems.Add(new MenuButtonItem { OnClick = () => openFilterAsync(filter), Text = filter.GetDisplayText(filterLoc), Icon = filter.Enabled ? new Icons.Regular.Size16.Play() : new Icons.Regular.Size16.Pause(), Class = "filter-menu-item", }); } filterMenuItems.Add(new MenuButtonItem { IsDivider = true }); if (filters.GetEnabledFilters().Any()) { filterMenuItems.Add(new MenuButtonItem { Text = dialogsLoc[nameof(Dialogs.FilterDialogDisableAll)], Icon = new Icons.Regular.Size16.Pause(), OnClick = async () => { foreach (var filter in filters) { filter.Enabled = false; } await page.AfterViewModelChangedAsync(contentLayout, waitToApplyMobileChange: false).ConfigureAwait(true); } }); } else { filterMenuItems.Add(new MenuButtonItem { Text = dialogsLoc[nameof(Dialogs.FilterDialogEnableAll)], Icon = new Icons.Regular.Size16.Play(), OnClick = async () => { foreach (var filter in filters) { filter.Enabled = true; } await page.AfterViewModelChangedAsync(contentLayout, waitToApplyMobileChange: false).ConfigureAwait(true); } }); } filterMenuItems.Add(new MenuButtonItem { Text = dialogsLoc[nameof(Dialogs.SettingsRemoveAllButtonText)], Icon = new Icons.Regular.Size16.Delete(), OnClick = async () => { clearFilters(); await page.AfterViewModelChangedAsync(contentLayout, waitToApplyMobileChange: false).ConfigureAwait(true); } }); return filterMenuItems; } }