From ddf912804fc4cb26d388283eacca63a0aeddf779 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 29 Nov 2020 16:02:57 +0900 Subject: Make background operations as a operator --- .../operators/impls/TabOperatorFactoryChain.ts | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/background/operators/impls/TabOperatorFactoryChain.ts (limited to 'src/background/operators/impls/TabOperatorFactoryChain.ts') diff --git a/src/background/operators/impls/TabOperatorFactoryChain.ts b/src/background/operators/impls/TabOperatorFactoryChain.ts new file mode 100644 index 0000000..b4cb401 --- /dev/null +++ b/src/background/operators/impls/TabOperatorFactoryChain.ts @@ -0,0 +1,64 @@ +import { inject, injectable } from "tsyringe"; +import OperatorFactoryChain from "../OperatorFactoryChain"; +import * as operations from "../../../shared/operations"; +import Operator from "../Operator"; +import TabPresenter from "../../presenters/TabPresenter"; +import CloseTabOperator from "./CloseTabOperator"; +import CloseTabRightOperator from "./CloseTabRightOperator"; +import ReopenTabOperator from "./ReopenTabOperator"; +import SelectTabPrevOperator from "./SelectTabPrevOperator"; +import SelectTabNextOperator from "./SelectTabPrevOperator"; +import SelectFirstTabOperator from "./SelectFirstTabOperator"; +import SelectLastTabOperator from "./SelectLastTabOperator"; +import SelectPreviousSelectedTabOperator from "./SelectPreviousSelectedTabOperator"; +import ReloadTabOperator from "./ReloadTabOperator"; +import PinTabOperator from "./PinTabOperator"; +import UnpinTabOperator from "./UnpinTabOperator"; +import TogglePinnedTabOperator from "./TogglePinnedTabOperator"; +import DuplicateTabOperator from "./DuplicateTabOperator"; + +@injectable() +export default class TabOperatorFactoryChain implements OperatorFactoryChain { + constructor( + @inject("TabPresenter") + private readonly tabPresenter: TabPresenter + ) {} + + create(op: operations.Operation): Operator | null { + switch (op.type) { + case operations.TAB_CLOSE: + return new CloseTabOperator( + this.tabPresenter, + false, + op.select === "left" + ); + case operations.TAB_CLOSE_RIGHT: + return new CloseTabRightOperator(this.tabPresenter); + case operations.TAB_CLOSE_FORCE: + return new CloseTabOperator(this.tabPresenter, true, false); + case operations.TAB_REOPEN: + return new ReopenTabOperator(this.tabPresenter); + case operations.TAB_PREV: + return new SelectTabPrevOperator(this.tabPresenter, 1); + case operations.TAB_NEXT: + return new SelectTabNextOperator(this.tabPresenter, 1); + case operations.TAB_FIRST: + return new SelectFirstTabOperator(this.tabPresenter); + case operations.TAB_LAST: + return new SelectLastTabOperator(this.tabPresenter); + case operations.TAB_PREV_SEL: + return new SelectPreviousSelectedTabOperator(this.tabPresenter); + case operations.TAB_RELOAD: + return new ReloadTabOperator(this.tabPresenter, op.cache); + case operations.TAB_PIN: + return new PinTabOperator(this.tabPresenter); + case operations.TAB_UNPIN: + return new UnpinTabOperator(this.tabPresenter); + case operations.TAB_TOGGLE_PINNED: + return new TogglePinnedTabOperator(this.tabPresenter); + case operations.TAB_DUPLICATE: + return new DuplicateTabOperator(this.tabPresenter); + } + return null; + } +} -- cgit v1.2.3