mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-07-04 22:02:16 +02:00
fix: make artifact navigation robust
This commit is contained in:
parent
050d6bf998
commit
6efc3bf517
4 changed files with 52 additions and 25 deletions
|
|
@ -5,23 +5,24 @@ import type { ChatArtifact } from "../model/artifact";
|
|||
/** Artifacts of the active thread, synced from the message stream by `useSyncChatArtifacts`. */
|
||||
export const chatArtifactsAtom = atom<ChatArtifact[]>([]);
|
||||
|
||||
/** Whether the artifacts sidebar is open in the right panel. */
|
||||
export const artifactsPanelOpenAtom = atom(false);
|
||||
/** Open === artifacts owns the tab; derived so the toggle can't drift. */
|
||||
export const artifactsPanelOpenAtom = atom((get) => get(rightPanelTabAtom) === "artifacts");
|
||||
|
||||
/** Snapshot of `rightPanelCollapsedAtom` taken before the panel opens, restored on close. */
|
||||
const preArtifactsCollapsedAtom = atom<boolean | null>(null);
|
||||
|
||||
export const openArtifactsPanelAtom = atom(null, (get, set) => {
|
||||
if (!get(artifactsPanelOpenAtom)) {
|
||||
if (get(rightPanelTabAtom) !== "artifacts") {
|
||||
set(preArtifactsCollapsedAtom, get(rightPanelCollapsedAtom));
|
||||
}
|
||||
set(artifactsPanelOpenAtom, true);
|
||||
set(rightPanelTabAtom, "artifacts");
|
||||
set(rightPanelCollapsedAtom, false);
|
||||
});
|
||||
|
||||
export const closeArtifactsPanelAtom = atom(null, (get, set) => {
|
||||
set(artifactsPanelOpenAtom, false);
|
||||
// Don't clobber the tab when another surface owns it.
|
||||
if (get(rightPanelTabAtom) !== "artifacts") return;
|
||||
// RightPanel's fallback then re-reveals any surface underneath (e.g. a report).
|
||||
set(rightPanelTabAtom, "sources");
|
||||
const prev = get(preArtifactsCollapsedAtom);
|
||||
if (prev !== null) {
|
||||
|
|
@ -31,6 +32,8 @@ export const closeArtifactsPanelAtom = atom(null, (get, set) => {
|
|||
});
|
||||
|
||||
export const toggleArtifactsPanelAtom = atom(null, (get, set) => {
|
||||
if (get(artifactsPanelOpenAtom)) set(closeArtifactsPanelAtom);
|
||||
// Only close when artifacts is actually visible; otherwise a click always opens it.
|
||||
const shown = get(rightPanelTabAtom) === "artifacts" && !get(rightPanelCollapsedAtom);
|
||||
if (shown) set(closeArtifactsPanelAtom);
|
||||
else set(openArtifactsPanelAtom);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue