mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-28 11:59:54 +00:00
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
import Component from '@ember/component';
|
|
// @ts-ignore: Ignore import of compiled template
|
|
import template from '../templates/components/concurrency-task-state-handler';
|
|
import { layout, tagName } from '@ember-decorators/component';
|
|
import { action } from '@ember/object';
|
|
import { Task, task } from 'ember-concurrency';
|
|
|
|
@layout(template)
|
|
@tagName('')
|
|
export default class ConcurrencyTaskStateHandler<T> extends Component {
|
|
/**
|
|
* List of arguments to be passed to the task when performed. The array is spread into the task invocation
|
|
*/
|
|
taskArgs: Array<unknown> = [];
|
|
|
|
/**
|
|
* Flag indicating if the lockup image and retry button should be shown in the ui
|
|
* Disabling allows this component to be used in interfaces that are not suitable to render a full error lockup
|
|
*/
|
|
showLockup = true;
|
|
|
|
/**
|
|
* Ember concurrency task which is performed by this component on retry request, and the state derived from the task drives
|
|
* component state. If the task is running a indication is shown in the ui, otherwise control is yielded to contextual content
|
|
*/
|
|
task: Task<T, (...args: Array<unknown>) => unknown> = task(function*(): IterableIterator<T> {});
|
|
|
|
/**
|
|
* Action handler to perform the task component argument and pass externally supplied arguments to the task
|
|
* @param {this['taskArgs']} args the arguments supplied as an array and spread into the task when performed / invoked
|
|
*/
|
|
@action
|
|
performTask(args: this['taskArgs']): void {
|
|
this.task.perform(...args);
|
|
}
|
|
}
|