Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
</MobilePageTitleToolbarSection>

<MainSection>
<LogViewer LogEntries="@_logEntries" HideTimestamp="@PageViewModel.HideTimestamp" />
<LogViewer LogEntries="@_logEntries" HideTimestamp="@_hideTimestamp" />
</MainSection>
</AspirePageContentLayout>
</div>
52 changes: 24 additions & 28 deletions src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

Expand Down Expand Up @@ -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<string, ResourceViewModel> _resourceByName = new(StringComparers.ResourceName);
private ImmutableList<SelectViewModel<ResourceTypeDetails>>? _resources;
Expand All @@ -93,6 +92,7 @@ private sealed class ConsoleLogsSubscription
private readonly List<MenuButtonItem> _resourceMenuItems = new();

// State
private bool _hideTimestamp;
public ConsoleLogsViewModel PageViewModel { get; set; } = null!;

public string BasePath => DashboardUrls.ConsoleLogBasePath;
Expand All @@ -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<ConsoleLogConsoleSettings>(BrowserStorageKeys.ConsoleLogConsoleSettings);
if (timestampStorageResult.Value?.HideTimestamp is { } hideTimestamp)
{
_hideTimestamp = hideTimestamp;
}

var loadingTcs = new TaskCompletionSource();

Expand Down Expand Up @@ -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()
});
Expand All @@ -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()
});
Expand Down Expand Up @@ -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();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this nessessary? I would have thought that it would be triggered automatically after the click event

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surprisingly yes, it is necessary. without:
Animation

}

private async Task ExecuteResourceCommandAsync(CommandViewModel command)
Expand Down Expand Up @@ -536,14 +544,11 @@ public class ConsoleLogsViewModel
public required string Status { get; set; }
public required SelectViewModel<ResourceTypeDetails> 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)
{
Expand All @@ -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);
}
}
1 change: 1 addition & 0 deletions src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
6 changes: 1 addition & 5 deletions src/Aspire.Dashboard/Utils/DashboardUrls.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down