AI-Studio/app/MindWork AI Studio/Pages/Chat.razor.cs

95 lines
3.7 KiB
C#
Raw Normal View History

2024-05-04 09:11:09 +00:00
using AIStudio.Chat;
2024-08-21 06:30:01 +00:00
using AIStudio.Components;
using AIStudio.Settings.DataModel;
2024-05-04 09:11:09 +00:00
using Microsoft.AspNetCore.Components;
2025-01-02 12:16:47 +00:00
using Timer = System.Timers.Timer;
2024-08-21 06:30:01 +00:00
namespace AIStudio.Pages;
2024-05-04 08:55:00 +00:00
/// <summary>
/// The chat page.
/// </summary>
2025-01-02 12:16:47 +00:00
public partial class Chat : MSGComponentBase
{
private const Placement TOOLBAR_TOOLTIP_PLACEMENT = Placement.Bottom;
2024-05-04 09:11:09 +00:00
private ChatThread? chatThread;
2025-01-02 12:16:47 +00:00
private AIStudio.Settings.Provider providerSettings;
2024-11-02 21:53:02 +00:00
private bool workspaceOverlayVisible;
2025-01-02 12:16:47 +00:00
private string currentWorkspaceName = string.Empty;
private Workspaces? workspaces;
2025-01-02 12:16:47 +00:00
private double splitterPosition = 30;
2024-05-04 09:11:09 +00:00
2025-01-02 12:16:47 +00:00
private readonly Timer splitterSaveTimer = new(TimeSpan.FromSeconds(1.6));
2024-05-04 09:11:09 +00:00
#region Overrides of ComponentBase
protected override async Task OnInitializedAsync()
{
2025-01-02 12:16:47 +00:00
this.splitterPosition = this.SettingsManager.ConfigurationData.Workspace.SplitterPosition;
this.splitterSaveTimer.AutoReset = false;
this.splitterSaveTimer.Elapsed += async (_, _) =>
2024-10-28 14:41:00 +00:00
{
2025-01-02 12:16:47 +00:00
this.SettingsManager.ConfigurationData.Workspace.SplitterPosition = this.splitterPosition;
await this.SettingsManager.StoreSettings();
};
2024-11-23 12:04:02 +00:00
2024-05-04 09:11:09 +00:00
await base.OnInitializedAsync();
}
2025-01-02 12:16:47 +00:00
#endregion
2024-11-02 21:53:02 +00:00
private string WorkspaceSidebarToggleIcon => this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible ? Icons.Material.Filled.ArrowCircleLeft : Icons.Material.Filled.ArrowCircleRight;
2024-09-11 21:08:02 +00:00
2025-01-02 12:16:47 +00:00
private bool AreWorkspacesVisible => this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES
&& ((this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR && this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible)
|| this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE);
2025-01-02 12:16:47 +00:00
private bool AreWorkspacesHidden => this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES
&& this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR
&& !this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible;
2024-11-02 21:53:02 +00:00
private async Task ToggleWorkspaceSidebar()
{
2024-11-02 21:53:02 +00:00
this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible = !this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible;
await this.SettingsManager.StoreSettings();
}
2025-01-02 12:16:47 +00:00
private void SplitterChanged(double position)
{
2025-01-02 12:16:47 +00:00
this.splitterPosition = position;
this.splitterSaveTimer.Stop();
this.splitterSaveTimer.Start();
}
2025-01-02 12:16:47 +00:00
private void ToggleWorkspacesOverlay()
2024-11-23 12:04:02 +00:00
{
2025-01-02 12:16:47 +00:00
this.workspaceOverlayVisible = !this.workspaceOverlayVisible;
this.StateHasChanged();
2024-11-23 12:04:02 +00:00
}
2025-01-02 12:16:47 +00:00
private double ReadSplitterPosition => this.AreWorkspacesHidden ? 6 : this.splitterPosition;
2024-11-23 12:04:02 +00:00
#region Overrides of MSGComponentBase
2025-01-02 12:16:47 +00:00
public override Task ProcessIncomingMessage<T>(ComponentBase? sendingComponent, Event triggeredEvent, T? data) where T : default
{
switch (triggeredEvent)
{
2025-01-02 12:16:47 +00:00
case Event.WORKSPACE_TOGGLE_OVERLAY:
this.ToggleWorkspacesOverlay();
2024-10-28 14:41:00 +00:00
break;
}
2025-01-02 12:16:47 +00:00
return Task.CompletedTask;
}
public override Task<TResult?> ProcessMessageWithResult<TPayload, TResult>(ComponentBase? sendingComponent, Event triggeredEvent, TPayload? data) where TResult : default where TPayload : default
{
return Task.FromResult(default(TResult));
}
#endregion
}