import { inject, injectable } from "tsyringe"; import TabItem from "./TabItem"; import TabRepository, { Tab } from "./TabRepository"; import TabPresenter from "../presenters/TabPresenter"; import TabFlag from "../../shared/TabFlag"; @injectable() export default class TabCompletionUseCase { constructor( @inject('TabRepository') private tabRepository: TabRepository, @inject('TabPresenter') private tabPresenter: TabPresenter, ) { } async queryTabs(query: string, excludePinned: boolean): Promise { const lastTabId = await this.tabPresenter.getLastSelectedId(); const allTabs = await this.tabRepository.getAllTabs(excludePinned); const num = parseInt(query, 10); let tabs: Tab[] = []; if (!isNaN(num)) { const tab = allTabs.find(t => t.index === num - 1); if (tab) { tabs = [tab]; } } else if (query == '%') { const tab = allTabs.find(t => t.active); if (tab) { tabs = [tab]; } } else if (query == '#') { const tab = allTabs.find(t => t.id === lastTabId); if (tab) { tabs = [tab]; } } else { tabs = await this.tabRepository.queryTabs(query, excludePinned); } return tabs.map(tab => { let flag = TabFlag.None; if (tab.active) { flag = TabFlag.CurrentTab } else if (tab.id == lastTabId) { flag = TabFlag.LastTab } return { index: tab.index + 1, flag: flag, title: tab.title, url: tab.url, faviconUrl : tab.faviconUrl } }); } }