/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/app/src/context/layout-tabs.ts
103 строки
3 KB
Luke Parker
feat(app): add inline file browser tabs (#35829)
09 июл 2026, 02:09
Не верифицирован
09 июл 2026, 02:09
62de2b3
Код
Авторство
О чём код?
export const SESSION_OPEN_FILE_TAB = "open-file" export type SessionTabs = { active?: string all: string[] } export type SessionTabState = { tabs: SessionTabs preview?: string } const sessionTabPreview = (current: SessionTabState) => current.preview ?? (current.tabs.all.includes(SESSION_OPEN_FILE_TAB) ? SESSION_OPEN_FILE_TAB : undefined) export function previewSessionTab(current: SessionTabState, tab: string): SessionTabState { const preview = sessionTabPreview(current) const previewIndex = preview ? current.tabs.all.indexOf(preview) : -1 const existingIndex = current.tabs.all.indexOf(tab) if (existingIndex !== -1) { if (previewIndex === -1 || preview === tab) { return { tabs: { all: current.tabs.all, active: tab }, preview: preview === tab ? tab : undefined } } return { tabs: { all: current.tabs.all.filter((item) => item !== preview), active: tab }, } } if (previewIndex === -1) { return { tabs: { all: [...current.tabs.all, tab], active: tab }, preview: tab } } return { tabs: { all: current.tabs.all.map((item, index) => (index === previewIndex ? tab : item)), active: tab, }, preview: tab, } } export function openSessionTab(current: SessionTabState, tab: string): SessionTabState { const preview = sessionTabPreview(current) if (tab === "review") { return { tabs: { all: current.tabs.all.filter((item) => item !== tab), active: tab }, preview, } } if (tab === "context") { return { tabs: { all: [tab, ...current.tabs.all.filter((item) => item !== tab)], active: tab }, preview, } } const previewIndex = preview ? current.tabs.all.indexOf(preview) : -1 const existingIndex = current.tabs.all.indexOf(tab) if (existingIndex !== -1) { if (previewIndex === -1 || preview === tab) { return { tabs: { all: current.tabs.all, active: tab } } } return { tabs: { all: current.tabs.all.filter((item) => item !== preview), active: tab }, } } if (previewIndex === -1) { return { tabs: { all: [...current.tabs.all, tab], active: tab } } } return { tabs: { all: current.tabs.all.map((item, index) => (index === previewIndex ? tab : item)), active: tab, }, } } export function closeSessionTab(current: SessionTabState, tab: string): SessionTabState { if (tab === "review") { if (current.tabs.active !== tab) return current return { tabs: { all: current.tabs.all, active: current.tabs.all[0] }, preview: current.preview, } } const all = current.tabs.all.filter((item) => item !== tab) const preview = current.preview === tab ? undefined : current.preview if (current.tabs.active !== tab) return { tabs: { ...current.tabs, all }, preview } const index = current.tabs.all.indexOf(tab) return { tabs: { all, active: current.tabs.all[index - 1] ?? current.tabs.all[index + 1] ?? all[0], }, preview, } }