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