/* * CloudBeaver - Cloud Database Manager * Copyright (C) 2020-2021 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ import { makeObservable, observable } from 'mobx'; import type { IDatabaseDataAction, IDatabaseDataActionClass, IDatabaseDataActionInterface } from './IDatabaseDataAction'; import type { IDatabaseDataResult } from './IDatabaseDataResult'; import type { IDatabaseDataSource } from './IDatabaseDataSource'; export abstract class DatabaseDataAction implements IDatabaseDataAction { result: TResult; get resultIndex(): number { return this.source.results.indexOf(this.result); } readonly source: IDatabaseDataSource; constructor(source: IDatabaseDataSource, result: TResult) { this.result = result; this.source = source; makeObservable(this, { result: observable.ref, }); } updateResult(result: TResult): void { this.result = result; } tryGetAction>( action: IDatabaseDataActionClass ): T | undefined { return this.source.actions.tryGet(this.result, action); } getAction>( action: IDatabaseDataActionClass ): T { return this.source.actions.get(this.result, action); } getActionImplementation >( action: IDatabaseDataActionInterface ): T | undefined { return this.source.actions.getImplementation(this.result, action); } dispose(): void {} } export function isDatabaseDataAction(action: any): action is IDatabaseDataActionClass { return action.prototype instanceof DatabaseDataAction; }