| File: Components\DashboardExperienceComponents.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 System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Components; namespace Aspire.Dashboard.Components; internal static class DashboardExperienceComponents { #if ASPIRE_LEGACY_DASHBOARD private const DynamicallyAccessedMemberTypes RuntimeActivatedComponentMembers = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties; private const string DashboardAssemblyName = "Aspire.Dashboard"; #endif private const string LegacyNamespacePrefix = "Aspire.Dashboard.Components.Legacy."; private const string LegacyMainLayoutTypeName = $"{LegacyNamespacePrefix}Layout.LegacyMainLayout"; private const string LegacyNotFoundTypeName = $"{LegacyNamespacePrefix}Pages.NotFound"; private static readonly Type? s_legacyMainLayoutType = typeof(App).Assembly.GetType(LegacyMainLayoutTypeName); private static readonly Type? s_legacyNotFoundType = typeof(App).Assembly.GetType(LegacyNotFoundTypeName); internal static bool IsLegacyAvailable => s_legacyMainLayoutType is not null && s_legacyNotFoundType is not null; internal static Type GetDefaultLayout(Type pageType) => IsLegacyPage(pageType) && s_legacyMainLayoutType is { } legacyLayout ? legacyLayout : typeof(Layout.MainLayout); internal static bool TryGetLegacyNotFound( NavigationManager navigationManager, [NotNullWhen(true)] out Type? layoutType, [NotNullWhen(true)] out Type? pageType) { layoutType = s_legacyMainLayoutType; pageType = s_legacyNotFoundType; return IsLegacyLocation(navigationManager) && layoutType is not null && pageType is not null; } private static bool IsLegacyPage(Type pageType) => pageType.Namespace?.StartsWith(LegacyNamespacePrefix, StringComparison.Ordinal) == true; /// <summary> /// Gets whether the current page belongs to the previous experience, for shared components that must keep main's /// behavior there, such as its resource URLs. /// </summary> internal static bool IsLegacyLocation(NavigationManager navigationManager) { // The base-relative path keeps the query and fragment, for example "legacy?view=Graph" on the legacy resources page. var path = navigationManager.ToBaseRelativePath(navigationManager.Uri); var endOfPath = path.IndexOfAny(['?', '#']); if (endOfPath >= 0) { path = path[..endOfPath]; } return string.Equals(path, "legacy", StringComparison.OrdinalIgnoreCase) || path.StartsWith("legacy/", StringComparison.OrdinalIgnoreCase); } #if ASPIRE_LEGACY_DASHBOARD [DynamicDependency(RuntimeActivatedComponentMembers, LegacyMainLayoutTypeName, DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.ConsoleLogs", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Error", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Login", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Metrics", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, LegacyNotFoundTypeName, DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Resources", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.StructuredLogs", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Terminals", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.TerminalWindow", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.TraceDetail", DashboardAssemblyName)] [DynamicDependency(RuntimeActivatedComponentMembers, $"{LegacyNamespacePrefix}Pages.Traces", DashboardAssemblyName)] #endif internal static void PreserveLegacyComponents() { } }