import { useCallback, useMemo, useSyncExternalStore } from "react"; import { getGlobalSftpBookmarksSnapshot, setGlobalSftpBookmarks, subscribeGlobalSftpBookmarks, } from "../../../application/state/sftp/globalSftpBookmarks"; import { createSftpBookmark, moveSftpBookmark, renameSftpBookmark } from "../../../application/state/sftp/bookmarkHelpers"; interface UseGlobalSftpBookmarksParams { currentPath: string | undefined; } export const useGlobalSftpBookmarks = ({ currentPath, }: UseGlobalSftpBookmarksParams) => { const bookmarks = useSyncExternalStore( subscribeGlobalSftpBookmarks, getGlobalSftpBookmarksSnapshot, getGlobalSftpBookmarksSnapshot, ); const isCurrentPathBookmarked = useMemo( () => !!currentPath && bookmarks.some((b) => b.path === currentPath), [currentPath, bookmarks], ); const addBookmark = useCallback((path: string) => { if (!path) return; if (bookmarks.some((b) => b.path === path)) return; setGlobalSftpBookmarks((prev) => [...prev, createSftpBookmark(path, { global: true })]); }, [bookmarks]); const deleteBookmark = useCallback((id: string) => { setGlobalSftpBookmarks((prev) => prev.filter((b) => b.id !== id)); }, []); const reorderBookmark = useCallback((fromId: string, toId: string) => { setGlobalSftpBookmarks((prev) => moveSftpBookmark(prev, fromId, toId)); }, []); const renameBookmark = useCallback((id: string, label: string) => { setGlobalSftpBookmarks((prev) => renameSftpBookmark(prev, id, label)); }, []); return { bookmarks, isCurrentPathBookmarked, addBookmark, deleteBookmark, reorderBookmark, renameBookmark, }; };