+
-
+
-
+
+
+
@code {
- string menuToggle = "hidden";
+ bool isMenuOpen;
bool isPersonaMenuOpen;
string PersonaBackground => CascadingState.Persona?.Header is { Length: > 0 } header && !header.Contains("/missing-")
@@ -144,21 +152,40 @@
protected override void OnInitialized()
{
IsLoading = false;
- if (!CascadingState.Status.IsMobileMedia())
- menuToggle = default;
+ Navigation.LocationChanged += OnLocationChanged;
+ }
+
+ void OnLocationChanged(object sender, LocationChangedEventArgs e)
+ {
+ if (!isMenuOpen)
+ return;
+ isMenuOpen = false;
+ InvokeAsync(StateHasChanged);
+ }
+
+ void CloseMenu() => isMenuOpen = false;
+
+ void OnKeyDown(KeyboardEventArgs e)
+ {
+ if (e.Key == "Escape")
+ isMenuOpen = false;
+ }
+
+ public override async ValueTask DisposeAsync()
+ {
+ Navigation.LocationChanged -= OnLocationChanged;
+ await base.DisposeAsync();
}
async Task SwitchPersona(string personaId)
{
+ isMenuOpen = false;
var result = await CascadingState.SwitchPersona(personaId);
if (result.IsInvalid)
Toast.AddResponseError(result);
}
- private void ToggleNavMenu()
- {
- menuToggle = menuToggle is { Length: > 0 } ? default : "hidden";
- }
+ private void ToggleNavMenu() => isMenuOpen = !isMenuOpen;
protected async Task ResetToOriginalColour()
{