Refresh session files panel on open
This commit is contained in:
@@ -34,6 +34,14 @@ export const Assistant = () => {
|
|||||||
const lastSessionId = getLastSessionId(messages);
|
const lastSessionId = getLastSessionId(messages);
|
||||||
const selectedResumeSessionId =
|
const selectedResumeSessionId =
|
||||||
messages.length > 1 ? selectedSessionId : null;
|
messages.length > 1 ? selectedSessionId : null;
|
||||||
|
const outgoingSessionId =
|
||||||
|
lastSessionId ?? selectedResumeSessionId ?? options.id;
|
||||||
|
if (typeof window !== "undefined" && outgoingSessionId) {
|
||||||
|
window.localStorage.setItem(
|
||||||
|
"claw.activeSessionId",
|
||||||
|
outgoingSessionId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
body: {
|
body: {
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ type ActivityContextValue = {
|
|||||||
mode: "activity" | "files";
|
mode: "activity" | "files";
|
||||||
selectedId: string | null;
|
selectedId: string | null;
|
||||||
sessionId: string | null;
|
sessionId: string | null;
|
||||||
|
filesRefreshToken: number;
|
||||||
openItem: (id: string) => void;
|
openItem: (id: string) => void;
|
||||||
openFiles: (sessionId?: string | null) => void;
|
openFiles: (sessionId?: string | null) => void;
|
||||||
close: () => void;
|
close: () => void;
|
||||||
@@ -54,6 +55,7 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
|
|||||||
const [mode, setMode] = useState<"activity" | "files">("activity");
|
const [mode, setMode] = useState<"activity" | "files">("activity");
|
||||||
const [selectedId, setSelectedId] = useState<string | null>(null);
|
const [selectedId, setSelectedId] = useState<string | null>(null);
|
||||||
const [sessionId, setSessionId] = useState<string | null>(null);
|
const [sessionId, setSessionId] = useState<string | null>(null);
|
||||||
|
const [filesRefreshToken, setFilesRefreshToken] = useState(0);
|
||||||
const openItem = useCallback((id: string) => {
|
const openItem = useCallback((id: string) => {
|
||||||
setMode("activity");
|
setMode("activity");
|
||||||
setSelectedId(id);
|
setSelectedId(id);
|
||||||
@@ -67,6 +69,7 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
|
|||||||
? window.localStorage.getItem("claw.activeSessionId")
|
? window.localStorage.getItem("claw.activeSessionId")
|
||||||
: null),
|
: null),
|
||||||
);
|
);
|
||||||
|
setFilesRefreshToken((value) => value + 1);
|
||||||
setOpen(true);
|
setOpen(true);
|
||||||
}, []);
|
}, []);
|
||||||
const close = useCallback(() => setOpen(false), []);
|
const close = useCallback(() => setOpen(false), []);
|
||||||
@@ -76,11 +79,21 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
|
|||||||
mode,
|
mode,
|
||||||
selectedId,
|
selectedId,
|
||||||
sessionId,
|
sessionId,
|
||||||
|
filesRefreshToken,
|
||||||
openItem,
|
openItem,
|
||||||
openFiles,
|
openFiles,
|
||||||
close,
|
close,
|
||||||
}),
|
}),
|
||||||
[open, mode, selectedId, sessionId, openItem, openFiles, close],
|
[
|
||||||
|
open,
|
||||||
|
mode,
|
||||||
|
selectedId,
|
||||||
|
sessionId,
|
||||||
|
filesRefreshToken,
|
||||||
|
openItem,
|
||||||
|
openFiles,
|
||||||
|
close,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -112,8 +125,15 @@ type ActivityItem = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export function ActivityPanel() {
|
export function ActivityPanel() {
|
||||||
const { open, mode, selectedId, sessionId, openItem, close } =
|
const {
|
||||||
useActivityPanel();
|
open,
|
||||||
|
mode,
|
||||||
|
selectedId,
|
||||||
|
sessionId,
|
||||||
|
filesRefreshToken,
|
||||||
|
openItem,
|
||||||
|
close,
|
||||||
|
} = useActivityPanel();
|
||||||
const messages = useAuiState((s) => s.thread.messages);
|
const messages = useAuiState((s) => s.thread.messages);
|
||||||
const items = useMemo(() => collectActivityItems(messages), [messages]);
|
const items = useMemo(() => collectActivityItems(messages), [messages]);
|
||||||
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
||||||
@@ -137,7 +157,13 @@ export function ActivityPanel() {
|
|||||||
if (!open) return null;
|
if (!open) return null;
|
||||||
|
|
||||||
if (mode === "files") {
|
if (mode === "files") {
|
||||||
return <SessionFilesPanel sessionId={sessionId} onClose={close} />;
|
return (
|
||||||
|
<SessionFilesPanel
|
||||||
|
key={`${sessionId ?? "active"}:${filesRefreshToken}`}
|
||||||
|
sessionId={sessionId}
|
||||||
|
onClose={close}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -245,8 +271,17 @@ function SessionFilesPanel({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
loadFiles();
|
loadFiles();
|
||||||
|
const handleRefresh = () => {
|
||||||
|
loadFiles();
|
||||||
|
};
|
||||||
|
window.addEventListener("claw-sessions-changed", handleRefresh);
|
||||||
|
window.addEventListener("claw-session-files-changed", handleRefresh);
|
||||||
|
window.addEventListener("focus", handleRefresh);
|
||||||
return () => {
|
return () => {
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
|
window.removeEventListener("claw-sessions-changed", handleRefresh);
|
||||||
|
window.removeEventListener("claw-session-files-changed", handleRefresh);
|
||||||
|
window.removeEventListener("focus", handleRefresh);
|
||||||
};
|
};
|
||||||
}, [sessionId]);
|
}, [sessionId]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user