feat(web/ui): unify session opening and add repo card in project list
- Add openSession utility with tab deduplication/focus - Use openSession in navbar live sessions, use-instance-actions, and project tool links - Pass onAddRepository to ProjectListItem and add dashed 'Add Repository' card - Style add-repo card in projects.css
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useState, useCallback, useRef } from "react";
|
||||
import { useState, useCallback } from "react";
|
||||
import {
|
||||
stopInstance,
|
||||
deleteInstance,
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
} from "../api/sessions";
|
||||
import type { Session } from "../api/sessions";
|
||||
import { useSessions } from "../state/sessions";
|
||||
import { openSession } from "../utils/open-session";
|
||||
|
||||
interface UseInstanceActionsOptions {
|
||||
onRefresh: () => Promise<void>;
|
||||
@@ -37,27 +38,9 @@ export function useInstanceActions(
|
||||
null,
|
||||
);
|
||||
const [dirtyDeleteFiles, setDirtyDeleteFiles] = useState<string[]>([]);
|
||||
const tabRefs = useRef<Map<string, Window | null>>(new Map());
|
||||
|
||||
const handleOpen = useCallback((session: Session) => {
|
||||
const key = session.id;
|
||||
const existing = tabRefs.current.get(key);
|
||||
if (existing && !existing.closed) {
|
||||
existing.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
let url: string;
|
||||
if (session.url) {
|
||||
url = session.url;
|
||||
} else if (session.tool_type_interfaces?.includes("terminal")) {
|
||||
url = `/instances/${session.id}/terminal`;
|
||||
} else {
|
||||
url = `/projects/${session.project_id}`;
|
||||
}
|
||||
|
||||
const w = window.open(url, `session-${session.id}`);
|
||||
tabRefs.current.set(key, w);
|
||||
openSession(session);
|
||||
}, []);
|
||||
|
||||
const handleStart = useCallback(
|
||||
|
||||
Reference in New Issue
Block a user