refactor: unify create session forms - show clone mode everywhere and display fixed fields as read-only

This commit is contained in:
Fusion
2026-05-23 19:53:12 +02:00
parent 2e9ca52cdb
commit 01adc9a00f
4 changed files with 36 additions and 5 deletions
@@ -12,7 +12,10 @@ interface CreateSessionFormProps {
toolTypes: ToolType[]; toolTypes: ToolType[];
fixedProjectId?: string; fixedProjectId?: string;
fixedRepoId?: string; fixedRepoId?: string;
projectName?: string;
repoName?: string;
showCloneMode?: boolean; showCloneMode?: boolean;
showFixedFields?: boolean;
onProjectChange?: (projectId: string) => void; onProjectChange?: (projectId: string) => void;
onSuccess?: (instance: ToolInstance) => void; onSuccess?: (instance: ToolInstance) => void;
onCancel?: () => void; onCancel?: () => void;
@@ -26,7 +29,10 @@ export const CreateSessionForm = ({
toolTypes, toolTypes,
fixedProjectId, fixedProjectId,
fixedRepoId, fixedRepoId,
showCloneMode = false, projectName,
repoName,
showCloneMode = true,
showFixedFields = true,
onProjectChange, onProjectChange,
onSuccess, onSuccess,
onCancel, onCancel,
@@ -132,7 +138,17 @@ export const CreateSessionForm = ({
<form onSubmit={handleSubmit} className="stack create-session-form"> <form onSubmit={handleSubmit} className="stack create-session-form">
<div className="form-row"> <div className="form-row">
{!fixedProjectId && ( {fixedProjectId && showFixedFields ? (
<label className="form-field">
Project
<input
type="text"
value={projectName || projects.find((p) => p.id === fixedProjectId)?.name || ""}
disabled
readOnly
/>
</label>
) : (
<label className="form-field"> <label className="form-field">
Project Project
<select <select
@@ -155,7 +171,17 @@ export const CreateSessionForm = ({
</label> </label>
)} )}
{!fixedRepoId && ( {fixedRepoId && showFixedFields ? (
<label className="form-field">
Repository
<input
type="text"
value={repoName || repositories.find((r) => r.id === fixedRepoId)?.name || ""}
disabled
readOnly
/>
</label>
) : (
<label className="form-field"> <label className="form-field">
Repository Repository
<select <select
+5 -1
View File
@@ -19,10 +19,12 @@ const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? "http://localhost:8000
interface InstanceListProps { interface InstanceListProps {
projectId: string; projectId: string;
repoId: string; repoId: string;
projectName?: string;
repoName?: string;
toolTypes: ToolType[]; toolTypes: ToolType[];
} }
export const InstanceList = ({ projectId, repoId, toolTypes }: InstanceListProps) => { export const InstanceList = ({ projectId, repoId, projectName, repoName, toolTypes }: InstanceListProps) => {
const navigate = useNavigate(); const navigate = useNavigate();
const [instances, setInstances] = useState<ToolInstance[]>([]); const [instances, setInstances] = useState<ToolInstance[]>([]);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@@ -304,6 +306,8 @@ export const InstanceList = ({ projectId, repoId, toolTypes }: InstanceListProps
toolTypes={toolTypes} toolTypes={toolTypes}
fixedProjectId={projectId} fixedProjectId={projectId}
fixedRepoId={repoId} fixedRepoId={repoId}
projectName={projectName}
repoName={repoName}
onSuccess={handleCreateSuccess} onSuccess={handleCreateSuccess}
onCancel={() => setShowCreate(false)} onCancel={() => setShowCreate(false)}
submitLabel="Launch" submitLabel="Launch"
+2
View File
@@ -254,6 +254,8 @@ export const RepoWorkspace = () => {
<InstanceList <InstanceList
projectId={projectId!} projectId={projectId!}
repoId={selectedRepoId} repoId={selectedRepoId}
projectName={project?.name}
repoName={repositories.find((r) => r.id === selectedRepoId)?.name}
toolTypes={toolTypes} toolTypes={toolTypes}
/> />
)} )}
-1
View File
@@ -565,7 +565,6 @@ export const SessionsPage = () => {
projects={projects} projects={projects}
repositories={repositories} repositories={repositories}
toolTypes={toolTypes} toolTypes={toolTypes}
showCloneMode={true}
onProjectChange={(projectId) => { onProjectChange={(projectId) => {
setSelectedProject(projectId); setSelectedProject(projectId);
}} }}