Refactor management UX and move workspace status to toasts
This commit is contained in:
@@ -622,12 +622,12 @@ public partial class Workspace : IAsyncDisposable
|
||||
EditCharacterInitialModel = new();
|
||||
CreateCharacterFormVersion = 0;
|
||||
EditCharacterFormVersion = 0;
|
||||
Toasts.Clear();
|
||||
}
|
||||
|
||||
private void SetStatus(string message, bool isError)
|
||||
{
|
||||
StatusMessage = message;
|
||||
StatusIsError = isError;
|
||||
AddToast(message, isError);
|
||||
Announce(message);
|
||||
}
|
||||
|
||||
@@ -636,6 +636,29 @@ public partial class Workspace : IAsyncDisposable
|
||||
LiveAnnouncement = message;
|
||||
}
|
||||
|
||||
private void AddToast(string message, bool isError)
|
||||
{
|
||||
var toastId = Guid.NewGuid();
|
||||
Toasts.Add(new WorkspaceToast(toastId, message, isError));
|
||||
_ = DismissToastLaterAsync(toastId);
|
||||
}
|
||||
|
||||
private async Task DismissToastLaterAsync(Guid toastId)
|
||||
{
|
||||
await Task.Delay(ToastDurationMs);
|
||||
|
||||
if (Toasts.RemoveAll(toast => toast.Id == toastId) == 0)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleScreenMenu()
|
||||
{
|
||||
IsScreenMenuOpen = !IsScreenMenuOpen;
|
||||
@@ -662,8 +685,7 @@ public partial class Workspace : IAsyncDisposable
|
||||
private bool IsCampaignDataLoading { get; set; }
|
||||
private bool HasHealthIssue { get; set; }
|
||||
private string HealthIssueMessage { get; set; } = "Retry to restore the API connection.";
|
||||
private string? StatusMessage { get; set; }
|
||||
private bool StatusIsError { get; set; }
|
||||
private List<WorkspaceToast> Toasts { get; } = [];
|
||||
private string CurrentScreen { get; set; } = "play";
|
||||
private string MobilePanel { get; set; } = "character";
|
||||
private string ConnectionState { get; set; } = "offline";
|
||||
@@ -721,4 +743,7 @@ public partial class Workspace : IAsyncDisposable
|
||||
private const string ScreenSessionKey = "screen";
|
||||
private const string CampaignSessionKey = "campaign";
|
||||
private const string MobilePanelSessionKey = "play-panel";
|
||||
private const int ToastDurationMs = 3200;
|
||||
|
||||
private sealed record WorkspaceToast(Guid Id, string Message, bool IsError);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user