mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { atom } from "jotai";
|
|
import type { ChatVisibility } from "@/lib/chat/thread-persistence";
|
|
import { reportPanelAtom } from "./report-panel.atom";
|
|
|
|
interface CurrentThreadState {
|
|
id: number | null;
|
|
visibility: ChatVisibility | null;
|
|
hasComments: boolean;
|
|
}
|
|
|
|
const initialState: CurrentThreadState = {
|
|
id: null,
|
|
visibility: null,
|
|
hasComments: false,
|
|
};
|
|
|
|
export const currentThreadAtom = atom<CurrentThreadState>(initialState);
|
|
|
|
export const commentsEnabledAtom = atom(
|
|
(get) => get(currentThreadAtom).visibility === "SEARCH_SPACE"
|
|
);
|
|
|
|
export const setThreadVisibilityAtom = atom(null, (get, set, newVisibility: ChatVisibility) => {
|
|
set(currentThreadAtom, { ...get(currentThreadAtom), visibility: newVisibility });
|
|
});
|
|
|
|
export const resetCurrentThreadAtom = atom(null, (_, set) => {
|
|
set(currentThreadAtom, initialState);
|
|
set(reportPanelAtom, { isOpen: false, reportId: null, title: null, wordCount: null });
|
|
});
|
|
|
|
/** Target comment ID to scroll to (from URL navigation or inbox click) */
|
|
export const targetCommentIdAtom = atom<number | null>(null);
|
|
|
|
export const setTargetCommentIdAtom = atom(null, (_, set, commentId: number | null) => {
|
|
set(targetCommentIdAtom, commentId);
|
|
});
|
|
|
|
export const clearTargetCommentIdAtom = atom(null, (_, set) => {
|
|
set(targetCommentIdAtom, null);
|
|
});
|