diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index 6bc9e4df..6d2a30e1 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -5797,6 +5797,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T25417398"] = "Update from v{0
-- Install later
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2936430090"] = "Install later"
+-- Create new workspace
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1541251414"] = "Create new workspace"
+
-- Add workspace
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1586005241"] = "Add workspace"
@@ -5809,9 +5812,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3249036008"] = "T
-- Please enter a workspace name.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3288132732"] = "Please enter a workspace name."
--- Create a new workspace
-UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T591103325"] = "Create a new workspace"
-
-- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T900713019"] = "Cancel"
diff --git a/app/MindWork AI Studio/Components/Workspaces.razor.cs b/app/MindWork AI Studio/Components/Workspaces.razor.cs
index c7bd7e35..49b99b2d 100644
--- a/app/MindWork AI Studio/Components/Workspaces.razor.cs
+++ b/app/MindWork AI Studio/Components/Workspaces.razor.cs
@@ -775,7 +775,8 @@ public partial class Workspaces : MSGComponentBase
return;
var workspaceName = (dialogResult.Data as string)!;
- if (await WorkspaceBehaviour.CreateWorkspaceAsync(workspaceName) is null)
+ var result = await WorkspaceBehaviour.TryCreateWorkspaceAsync(workspaceName);
+ if (!result.Success)
return;
await this.LoadTreeItemsAsync(startPrefetch: false);
diff --git a/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor b/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor
index 9d4be74d..736305c9 100644
--- a/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor
+++ b/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor
@@ -11,26 +11,32 @@
}
-
- @T("Create a new workspace")
-
-
-
-
-
-
-
-
-
+ @if (this.showCreateWorkspaceForm)
+ {
+
+
+
+
+
+
+
+
+ }
+ else
+ {
+
+ @T("Create new workspace")
+
+ }
diff --git a/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor.cs b/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor.cs
index b6edb43f..54de7c21 100644
--- a/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor.cs
+++ b/app/MindWork AI Studio/Dialogs/WorkspaceSelectionDialog.razor.cs
@@ -26,6 +26,7 @@ public partial class WorkspaceSelectionDialog : MSGComponentBase
private Guid selectedWorkspace;
private string newWorkspaceName = string.Empty;
private bool isCreatingWorkspace;
+ private bool showCreateWorkspaceForm;
private string? createWorkspaceError;
private string? createWorkspaceErrorName;
@@ -79,6 +80,14 @@ public partial class WorkspaceSelectionDialog : MSGComponentBase
await this.CreateWorkspaceAsync();
}
+ private void ShowCreateWorkspaceForm()
+ {
+ this.createWorkspaceError = null;
+ this.createWorkspaceErrorName = null;
+ this.newWorkspaceName = string.Empty;
+ this.showCreateWorkspaceForm = true;
+ }
+
private async Task CreateWorkspaceAsync()
{
this.createWorkspaceError = null;
@@ -90,8 +99,8 @@ public partial class WorkspaceSelectionDialog : MSGComponentBase
this.isCreatingWorkspace = true;
try
{
- var workspace = await WorkspaceBehaviour.CreateWorkspaceAsync(this.newWorkspaceName);
- if (workspace is null)
+ var result = await WorkspaceBehaviour.TryCreateWorkspaceAsync(this.newWorkspaceName);
+ if (!result.Success)
{
this.createWorkspaceError = T("There is already a workspace with this name. Please choose a different name.");
this.createWorkspaceErrorName = WorkspaceBehaviour.NormalizeWorkspaceName(this.newWorkspaceName);
@@ -99,10 +108,11 @@ public partial class WorkspaceSelectionDialog : MSGComponentBase
return;
}
- this.workspaces.Add(new(workspace.Value.WorkspaceId, workspace.Value.Name));
- this.selectedWorkspace = workspace.Value.WorkspaceId;
+ this.workspaces.Add(new(result.Workspace.WorkspaceId, result.Workspace.Name));
+ this.selectedWorkspace = result.Workspace.WorkspaceId;
this.newWorkspaceName = string.Empty;
this.createWorkspaceForm.ResetValidation();
+ this.showCreateWorkspaceForm = false;
}
finally
{
diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
index 1147167d..8367e109 100644
--- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
@@ -5799,6 +5799,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T25417398"] = "Aktualisieren v
-- Install later
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2936430090"] = "Später installieren"
+-- Create new workspace
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1541251414"] = "Neuen Arbeitsbereich erstellen"
+
-- Add workspace
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1586005241"] = "Arbeitsbereich hinzufügen"
@@ -5811,9 +5814,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3249036008"] = "E
-- Please enter a workspace name.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3288132732"] = "Bitte geben Sie einen Namen für diesen Arbeitsbereich ein."
--- Create a new workspace
-UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T591103325"] = "Neuen Arbeitsbereich erstellen"
-
-- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T900713019"] = "Abbrechen"
diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
index 498df5c3..c1104280 100644
--- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
@@ -5799,6 +5799,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T25417398"] = "Update from v{0
-- Install later
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2936430090"] = "Install later"
+-- Create new workspace
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1541251414"] = "Create new workspace"
+
-- Add workspace
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T1586005241"] = "Add workspace"
@@ -5811,9 +5814,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3249036008"] = "T
-- Please enter a workspace name.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T3288132732"] = "Please enter a workspace name."
--- Create a new workspace
-UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T591103325"] = "Create a new workspace"
-
-- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::WORKSPACESELECTIONDIALOG::T900713019"] = "Cancel"
diff --git a/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs b/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs
index 7305d715..aaa5bb04 100644
--- a/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs
+++ b/app/MindWork AI Studio/Tools/WorkspaceBehaviour.cs
@@ -12,6 +12,8 @@ namespace AIStudio.Tools;
public static class WorkspaceBehaviour
{
+ public readonly record struct TryCreateWorkspaceResult(bool Success, WorkspaceTreeWorkspace Workspace);
+
private sealed class WorkspaceChatCacheEntry
{
public Guid WorkspaceId { get; init; }
@@ -615,18 +617,18 @@ public static class WorkspaceBehaviour
}
}
- public static async Task CreateWorkspaceAsync(string workspaceName)
+ public static async Task TryCreateWorkspaceAsync(string workspaceName)
{
var normalizedWorkspaceName = NormalizeWorkspaceName(workspaceName);
if (string.IsNullOrWhiteSpace(normalizedWorkspaceName))
- return null;
+ return new(false, default);
await WORKSPACE_TREE_CACHE_SEMAPHORE.WaitAsync();
try
{
await EnsureTreeShellLoadedCoreAsync();
if (WorkspaceNameExistsCore(normalizedWorkspaceName))
- return null;
+ return new(false, default);
var workspaceId = Guid.NewGuid();
var workspacePath = Path.Join(WORKSPACE_ROOT_DIRECTORY, workspaceId.ToString());
@@ -646,7 +648,7 @@ public static class WorkspaceBehaviour
WORKSPACE_TREE_CACHE.Workspaces[workspaceId] = workspace;
WORKSPACE_TREE_CACHE.WorkspaceOrder.Add(workspaceId);
- return ToPublicWorkspace(workspace);
+ return new(true, ToPublicWorkspace(workspace));
}
finally
{