refactor: unify tool-starting logic with shared useStartTool hook
- New useStartTool hook: calls working createInstance+startInstance API - WorkspacesPage: uses shared hook instead of inline createInstance logic - WorkspaceDetailPage ToolsTab: uses shared hook instead of broken createWorkspaceInstance - Both pages now use identical StartToolModal + identical start logic Quality gates: tsc --noEmit clean
This commit is contained in:
@@ -7,6 +7,7 @@ import { useWorkspaces } from "../hooks/use-workspaces";
|
||||
import { useWorkspaceFiles } from "../hooks/use-workspace-files";
|
||||
import { useWorkspaceGit } from "../hooks/use-workspace-git";
|
||||
import { useWorkspaceInstances } from "../hooks/use-workspace-instances";
|
||||
import { useStartTool } from "../hooks/use-start-tool";
|
||||
import { useMobileViewport } from "../hooks/use-mobile-viewport";
|
||||
import { StartToolModal } from "../components/start-tool-modal";
|
||||
import type { FileEntry } from "../api/workspace-files";
|
||||
@@ -312,7 +313,8 @@ function GitTab({ workspaceId }: { workspaceId: string }) {
|
||||
/* ─── Tools Tab ─── */
|
||||
|
||||
function ToolsTab({ workspace }: { workspace: Workspace }) {
|
||||
const { instances, loading, create } = useWorkspaceInstances(workspace.id);
|
||||
const { instances, loading, refresh } = useWorkspaceInstances(workspace.id);
|
||||
const { startTool, starting } = useStartTool();
|
||||
const [showModal, setShowModal] = useState(false);
|
||||
|
||||
return (
|
||||
@@ -326,8 +328,9 @@ function ToolsTab({ workspace }: { workspace: Workspace }) {
|
||||
<button
|
||||
className="btn btn-primary"
|
||||
onClick={() => setShowModal(true)}
|
||||
disabled={starting}
|
||||
>
|
||||
Start Tool
|
||||
{starting ? "Starting..." : "Start Tool"}
|
||||
</button>
|
||||
</div>
|
||||
) : (
|
||||
@@ -355,8 +358,9 @@ function ToolsTab({ workspace }: { workspace: Workspace }) {
|
||||
<button
|
||||
className="btn btn-primary"
|
||||
onClick={() => setShowModal(true)}
|
||||
disabled={starting}
|
||||
>
|
||||
Start Another Tool
|
||||
{starting ? "Starting..." : "Start Another Tool"}
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
@@ -365,8 +369,16 @@ function ToolsTab({ workspace }: { workspace: Workspace }) {
|
||||
workspace={workspace}
|
||||
onClose={() => setShowModal(false)}
|
||||
onStart={async (toolTypeId, configProfileId) => {
|
||||
await create(toolTypeId, undefined, configProfileId);
|
||||
setShowModal(false);
|
||||
const instance = await startTool(
|
||||
workspace,
|
||||
toolTypeId,
|
||||
undefined,
|
||||
configProfileId,
|
||||
);
|
||||
if (instance) {
|
||||
setShowModal(false);
|
||||
await refresh();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
@@ -376,11 +388,7 @@ function ToolsTab({ workspace }: { workspace: Workspace }) {
|
||||
|
||||
/* ─── Settings Tab ─── */
|
||||
|
||||
function SettingsTab({
|
||||
workspace,
|
||||
}: {
|
||||
workspace: Workspace;
|
||||
}) {
|
||||
function SettingsTab({ workspace }: { workspace: Workspace }) {
|
||||
return (
|
||||
<div className="settings-tab">
|
||||
<div className="settings-section">
|
||||
@@ -411,5 +419,3 @@ function SettingsTab({
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user