Repeat last operation

This commit is contained in:
Shin'ya Ueoka 2019-05-25 21:33:33 +09:00
parent 03370301a7
commit ccbe08cf66
7 changed files with 110 additions and 7 deletions

View file

@ -6,6 +6,7 @@ import TabUseCase from '../usecases/TabUseCase';
import TabSelectUseCase from '../usecases/TabSelectUseCase';
import ZoomUseCase from '../usecases/ZoomUseCase';
import NavigateUseCase from '../usecases/NavigateUseCase';
import RepeatUseCase from '../usecases/RepeatUseCase';
@injectable()
export default class OperationController {
@ -16,11 +17,19 @@ export default class OperationController {
private tabSelectUseCase: TabSelectUseCase,
private zoomUseCase: ZoomUseCase,
private navigateUseCase: NavigateUseCase,
private repeatUseCase: RepeatUseCase,
) {
}
async exec(op: operations.Operation): Promise<any> {
await this.doOperation(op);
if (this.repeatUseCase.isRepeatable(op)) {
this.repeatUseCase.storeLastOperation(op);
}
}
// eslint-disable-next-line complexity, max-lines-per-function
exec(operation: operations.Operation): Promise<any> {
doOperation(operation: operations.Operation): Promise<any> {
switch (operation.type) {
case operations.TAB_CLOSE:
return this.tabUseCase.close(false);
@ -88,6 +97,14 @@ export default class OperationController {
return this.navigateUseCase.openParent();
case operations.NAVIGATE_ROOT:
return this.navigateUseCase.openRoot();
case operations.REPEAT_LAST:
{
let last = this.repeatUseCase.getLastOperation();
if (typeof last !== 'undefined') {
return this.doOperation(last);
}
return Promise.resolve();
}
}
throw new Error('unknown operation: ' + operation.type);
}