diff --git a/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor b/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor
index 3624efff22d..652ca3fb134 100644
--- a/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor
+++ b/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor
@@ -74,7 +74,7 @@
-
+
diff --git a/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs b/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs
index a077c3097fb..fd957a3ce5f 100644
--- a/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs
+++ b/src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs
@@ -46,6 +46,9 @@ private sealed class ConsoleLogsSubscription
[Inject]
public required IDashboardClient DashboardClient { get; init; }
+ [Inject]
+ public required ILocalStorage LocalStorage { get; init; }
+
[Inject]
public required ISessionStorage SessionStorage { get; init; }
@@ -73,10 +76,6 @@ private sealed class ConsoleLogsSubscription
[Parameter]
public string? ResourceName { get; set; }
- [Parameter]
- [SupplyParameterFromQuery(Name = "hideTimestamp")]
- public bool? HideTimestamp { get; set; }
-
private readonly CancellationTokenSource _resourceSubscriptionCts = new();
private readonly ConcurrentDictionary _resourceByName = new(StringComparers.ResourceName);
private ImmutableList>? _resources;
@@ -93,6 +92,7 @@ private sealed class ConsoleLogsSubscription
private readonly List _resourceMenuItems = new();
// State
+ private bool _hideTimestamp;
public ConsoleLogsViewModel PageViewModel { get; set; } = null!;
public string BasePath => DashboardUrls.ConsoleLogBasePath;
@@ -103,7 +103,13 @@ protected override async Task OnInitializedAsync()
_resourceSubscriptionToken = _resourceSubscriptionCts.Token;
_logEntries = new(Options.Value.Frontend.MaxConsoleLogCount);
_noSelection = new() { Id = null, Name = ControlsStringsLoc[nameof(ControlsStrings.LabelNone)] };
- PageViewModel = new ConsoleLogsViewModel { SelectedOption = _noSelection, SelectedResource = null, Status = Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsLoadingResources)], HideTimestamp = false };
+ PageViewModel = new ConsoleLogsViewModel { SelectedOption = _noSelection, SelectedResource = null, Status = Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsLoadingResources)] };
+
+ var timestampStorageResult = await LocalStorage.GetUnprotectedAsync(BrowserStorageKeys.ConsoleLogConsoleSettings);
+ if (timestampStorageResult.Value?.HideTimestamp is { } hideTimestamp)
+ {
+ _hideTimestamp = hideTimestamp;
+ }
var loadingTcs = new TaskCompletionSource();
@@ -262,11 +268,11 @@ private void UpdateMenuButtons()
Icon = new Icons.Regular.Size16.ArrowDownload()
});
- if (PageViewModel.HideTimestamp)
+ if (_hideTimestamp)
{
_logsMenuItems.Add(new()
{
- OnClick = () => ToggleTimestamp(hideTimestamp: false),
+ OnClick = () => ToggleTimestampAsync(hideTimestamp: false),
Text = Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsTimestampShow)],
Icon = new Icons.Regular.Size16.CalendarClock()
});
@@ -275,7 +281,7 @@ private void UpdateMenuButtons()
{
_logsMenuItems.Add(new()
{
- OnClick = () => ToggleTimestamp(hideTimestamp: true),
+ OnClick = () => ToggleTimestampAsync(hideTimestamp: true),
Text = Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsTimestampHide)],
Icon = new Icons.Regular.Size16.DismissSquareMultiple()
});
@@ -308,10 +314,12 @@ private void UpdateMenuButtons()
}
}
- private async Task ToggleTimestamp(bool hideTimestamp)
+ private async Task ToggleTimestampAsync(bool hideTimestamp)
{
- PageViewModel.HideTimestamp = hideTimestamp;
- await this.AfterViewModelChangedAsync(_contentLayout, waitToApplyMobileChange: false);
+ await LocalStorage.SetUnprotectedAsync(BrowserStorageKeys.ConsoleLogConsoleSettings, new ConsoleLogConsoleSettings(HideTimestamp: hideTimestamp));
+ _hideTimestamp = hideTimestamp;
+
+ StateHasChanged();
}
private async Task ExecuteResourceCommandAsync(CommandViewModel command)
@@ -536,14 +544,11 @@ public class ConsoleLogsViewModel
public required string Status { get; set; }
public required SelectViewModel SelectedOption { get; set; }
public required ResourceViewModel? SelectedResource { get; set; }
- public required bool HideTimestamp { get; set; }
}
- public class ConsoleLogsPageState
- {
- public string? SelectedResource { get; set; }
- public bool HideTimestamp { get; set; }
- }
+ public record ConsoleLogsPageState(string? SelectedResource);
+
+ public record ConsoleLogConsoleSettings(bool HideTimestamp);
public Task UpdateViewModelFromQueryAsync(ConsoleLogsViewModel viewModel)
{
@@ -562,25 +567,16 @@ public Task UpdateViewModelFromQueryAsync(ConsoleLogsViewModel viewModel)
viewModel.Status = Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsNoResourceSelected)];
}
- if (HideTimestamp is { } hideTimestamp)
- {
- viewModel.HideTimestamp = hideTimestamp;
- }
-
return Task.CompletedTask;
}
public string GetUrlFromSerializableViewModel(ConsoleLogsPageState serializable)
{
- return DashboardUrls.ConsoleLogsUrl(serializable.SelectedResource, serializable.HideTimestamp);
+ return DashboardUrls.ConsoleLogsUrl(serializable.SelectedResource);
}
public ConsoleLogsPageState ConvertViewModelToSerializable()
{
- return new ConsoleLogsPageState
- {
- SelectedResource = PageViewModel.SelectedResource?.Name,
- HideTimestamp = PageViewModel.HideTimestamp
- };
+ return new ConsoleLogsPageState(PageViewModel.SelectedResource?.Name);
}
}
diff --git a/src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs b/src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs
index f734c4c6342..1d5e8eeaeab 100644
--- a/src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs
+++ b/src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs
@@ -13,6 +13,7 @@ internal static class BrowserStorageKeys
public const string StructuredLogsPageState = "Aspire_PageState_StructuredLogs";
public const string MetricsPageState = "Aspire_PageState_Metrics";
public const string ConsoleLogsPageState = "Aspire_PageState_ConsoleLogs";
+ public const string ConsoleLogConsoleSettings = "Aspire_ConsoleLog_ConsoleSettings";
public static string SplitterOrientationKey(string viewKey)
{
diff --git a/src/Aspire.Dashboard/Utils/DashboardUrls.cs b/src/Aspire.Dashboard/Utils/DashboardUrls.cs
index dd07457b12e..8c80a0e9365 100644
--- a/src/Aspire.Dashboard/Utils/DashboardUrls.cs
+++ b/src/Aspire.Dashboard/Utils/DashboardUrls.cs
@@ -24,17 +24,13 @@ public static string ResourcesUrl(string? resource = null)
return url;
}
- public static string ConsoleLogsUrl(string? resource = null, bool? hideTimestamp = null)
+ public static string ConsoleLogsUrl(string? resource = null)
{
var url = $"/{ConsoleLogBasePath}";
if (resource != null)
{
url += $"/resource/{Uri.EscapeDataString(resource)}";
}
- if (hideTimestamp ?? false)
- {
- url = QueryHelpers.AddQueryString(url, "hideTimestamp", "true");
- }
return url;
}