aboutsummaryrefslogtreecommitdiff
path: root/src/background/operators/impls/CloseTabOperator.ts
blob: 5d8e80b5a68732bb5c2d887e7847c89d876b3246 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import Operator from "../Operator";
import TabPresenter from "../../presenters/TabPresenter";

export default class CloseTabOperator implements Operator {
  constructor(
    private readonly tabPresenter: TabPresenter,
    private readonly force: boolean = false,
    private readonly selectLeft: boolean = false
  ) {}

  async run(): Promise<void> {
    const tab = await this.tabPresenter.getCurrent();
    if (!this.force && tab.pinned) {
      return Promise.resolve();
    }
    if (this.selectLeft && tab.index > 0) {
      const tabs = await this.tabPresenter.getAll();
      await this.tabPresenter.select(tabs[tab.index - 1].id as number);
    }
    return this.tabPresenter.remove([tab.id as number]);
  }
}