summary refs log tree commit diff
path: root/extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor
diff options
context:
space:
mode:
Diffstat (limited to 'extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor')
-rw-r--r--extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor52
1 files changed, 52 insertions, 0 deletions
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor b/extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor
new file mode 100644

index 00000000..0c9a1064 --- /dev/null +++ b/extra/admin-api/Utilities/Spacebar.Client/Components/SessionManager.razor
@@ -0,0 +1,52 @@ +@using ArcaneLibs.Blazor.Components +@using ArcaneLibs.Blazor.Components.Services +@using Spacebar.Client.WebCore +@inject SessionStore sessionStore +@inject JsConsoleService jsConsole + +<DebugBanner Name="@GetType().Name" @ref="_dbgBanner"/> +@if (_sessionPickerVisible) { + <ModalWindow Title="Session manager" OnCloseClickedAsync="@(() => SetSessionPickerVisible(false))"> + @foreach (var (sessionId, session) in _sessionEntries) { + <LinkButton + OnClickAsync="@(() => SetCurrentSessionAsync(sessionId))">@(session.ProfileCache?.Username ?? "Unknown user")#@(session.ProfileCache?.Discriminator ?? "0000") <sub + class="code">on @session.ServerName</sub></LinkButton> + } + <br/><br/> + <LinkButton href="/login">Log in</LinkButton> + <LinkButton href="/register">Register</LinkButton> + </ModalWindow> +} + +@code { + private bool _sessionPickerVisible; + private DebugBanner _dbgBanner; + + private Dictionary<Guid, SessionEntry> _sessionEntries = []; + + protected override async Task OnAfterRenderAsync(bool firstRender) { + if (!firstRender) return; + await _dbgBanner.SetStatus("Crunching numbers..."); + _sessionPickerVisible = await sessionStore.GetCurrentSessionAsync() == null; + await _dbgBanner.SetStatus("Ready!"); + await _dbgBanner.SetStatus(null, 1000); + } + + public async Task SetSessionPickerVisible(bool visible = true) { + await jsConsole.Info("[SessionManager] showing session picker..."); + _sessionEntries = visible ? await sessionStore.GetAllSessionsAsync() : []; + _sessionPickerVisible = visible; + StateHasChanged(); + await Task.Delay(1); + } + + private async Task SetCurrentSessionAsync(Guid sessionId) { + _sessionPickerVisible = false; + StateHasChanged(); + await sessionStore.SetCurrentSessionAsync(sessionId); + var cs = await sessionStore.GetCurrentSessionAsync(); + await _dbgBanner.SetStatus($"Current session changed to {cs!.ProfileCache?.Username}#{cs.ProfileCache?.Discriminator} ({cs.ProfileCache.Id}) / {sessionId.ToString()}!"); + await _dbgBanner.SetStatus(null, 3000); + } + +} \ No newline at end of file