123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
- import * as React from 'react';
- import { PluginComponent } from './base';
- import { OrderedMap } from 'immutable';
- import { TaskManager } from 'mol-plugin/util/task-manager';
- import { filter } from 'rxjs/operators';
- import { Progress } from 'mol-task';
- export class BackgroundTaskProgress extends PluginComponent<{ }, { tracked: OrderedMap<number, TaskManager.ProgressEvent> }> {
- componentDidMount() {
- this.subscribe(this.plugin.events.task.progress.pipe(filter(e => e.level !== 'none')), e => {
- this.setState({ tracked: this.state.tracked.set(e.id, e) })
- });
- this.subscribe(this.plugin.events.task.finished, ({ id }) => {
- this.setState({ tracked: this.state.tracked.delete(id) })
- })
- }
- state = { tracked: OrderedMap<number, TaskManager.ProgressEvent>() };
- render() {
- return <div>
- {this.state.tracked.valueSeq().map(e => <ProgressEntry key={e!.id} event={e!} />)}
- </div>;
- }
- }
- class ProgressEntry extends PluginComponent<{ event: TaskManager.ProgressEvent }> {
- render() {
- const root = this.props.event.progress.root;
- const subtaskCount = countSubtasks(this.props.event.progress.root) - 1;
- const pr = root.progress.isIndeterminate
- ? void 0
- : <>[{root.progress.current}/{root.progress.max}]</>;
- const subtasks = subtaskCount > 0
- ? <>[{subtaskCount} subtask(s)]</>
- : void 0
- return <div>
- {root.progress.message} {pr} {subtasks}
- </div>;
- }
- }
- function countSubtasks(progress: Progress.Node) {
- if (progress.children.length === 0) return 1;
- let sum = 0;
- for (const c of progress.children) sum += countSubtasks(c);
- return sum;
- }
|