| |
| |
| |
|
|
| import { setKeybindings } from "@earendil-works/pi-tui"; |
| import { KeybindingsManager } from "../core/keybindings.ts"; |
| import type { SessionInfo, SessionListProgress } from "../core/session-manager.ts"; |
| import type { SettingsManager } from "../core/settings-manager.ts"; |
| import { SessionSelectorComponent } from "../modes/interactive/components/session-selector.ts"; |
| import { createStartupTui, startStartupTui } from "./startup-ui.ts"; |
|
|
| type SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>; |
|
|
| |
| export async function selectSession( |
| currentSessionsLoader: SessionsLoader, |
| allSessionsLoader: SessionsLoader, |
| settingsManager: SettingsManager, |
| ): Promise<string | null> { |
| const ui = await createStartupTui(settingsManager); |
| return new Promise((resolve) => { |
| const keybindings = KeybindingsManager.create(); |
| setKeybindings(keybindings); |
| let resolved = false; |
|
|
| const selector = new SessionSelectorComponent( |
| currentSessionsLoader, |
| allSessionsLoader, |
| (path: string) => { |
| if (!resolved) { |
| resolved = true; |
| ui.stop(); |
| resolve(path); |
| } |
| }, |
| () => { |
| if (!resolved) { |
| resolved = true; |
| ui.stop(); |
| resolve(null); |
| } |
| }, |
| () => { |
| ui.stop(); |
| process.exit(0); |
| }, |
| () => ui.requestRender(), |
| { showRenameHint: false, keybindings }, |
| ); |
|
|
| ui.addChild(selector); |
| ui.setFocus(selector.getSessionList()); |
| startStartupTui(ui, settingsManager); |
| }); |
| } |
|
|