/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/app/src/context/closed-tabs.ts
40 строк
1 KB
usrnk1
feat(desktop): reopen closed tabs and background tab open (#35010)
05 июл 2026, 04:37
Не верифицирован
05 июл 2026, 04:37
82db86e
Код
Авторство
О чём код?
import type { SessionTab, Tab } from "./tabs" export type ClosedTab = { tab: SessionTab index: number } const CLOSED_TAB_LIMIT = 25 // Only session tabs are recorded; closing a draft tab deletes its persisted // state, so a reopened draft would come back empty anyway. export function pushClosedTab(stack: ClosedTab[], tab: Tab, index: number): ClosedTab[] { if (tab.type !== "session") return stack return [...stack, { tab: { ...tab }, index }].slice(-CLOSED_TAB_LIMIT) } // Pops the most recently closed tab that is not open again, // discarding stale entries along the way. export function takeClosedTab(stack: ClosedTab[], tabs: Tab[]): { entry?: ClosedTab; stack: ClosedTab[] } { const remaining = [...stack] while (remaining.length) { const entry = remaining.pop() if (entry && !isOpen(tabs, entry.tab)) return { entry, stack: remaining } } return { stack: remaining } } export function removeClosedTabs(stack: ClosedTab[], server: SessionTab["server"], sessionIDs: string[]) { const removed = new Set(sessionIDs) return stack.filter((entry) => entry.tab.server !== server || !removed.has(entry.tab.sessionId)) } export function nextTabAfterClose(tabs: Tab[], index: number, active: boolean) { if (!active) return undefined return tabs[index + 1] ?? tabs[index - 1] ?? null } function isOpen(tabs: Tab[], tab: SessionTab) { return tabs.some((item) => item.type === "session" && item.server === tab.server && item.sessionId === tab.sessionId) }