mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-14 01:25:37 -05:00
Fix task flicker (#5694)
* adjust timer rendering * give each element a unique id * remove testing code * remove unused imports * change task timeout to 1000
This commit is contained in:
@@ -8,6 +8,8 @@ import { TaskNode, TaskStatus } from 'sql/platform/tasks/common/tasksNode';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { localize } from 'vs/nls';
|
||||
import * as Utils from 'sql/platform/connection/common/utils';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IntervalTimer } from 'vs/base/common/async';
|
||||
|
||||
const $ = dom.$;
|
||||
|
||||
@@ -17,6 +19,7 @@ export interface ITaskHistoryTemplateData {
|
||||
label: HTMLSpanElement;
|
||||
description: HTMLSpanElement;
|
||||
time: HTMLSpanElement;
|
||||
disposables: Array<IDisposable>;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,15 +39,15 @@ export class TaskHistoryRenderer implements IRenderer {
|
||||
/**
|
||||
* Returns the element's height in the tree, in pixels.
|
||||
*/
|
||||
public getHeight(tree: ITree, element: any): number {
|
||||
public getHeight(tree: ITree, element: TaskNode): number {
|
||||
return TaskHistoryRenderer.TASKOBJECT_HEIGHT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a template ID for a given element.
|
||||
*/
|
||||
public getTemplateId(tree: ITree, element: any): string {
|
||||
return TaskHistoryRenderer.TASKOBJECT_TEMPLATE_ID;
|
||||
public getTemplateId(tree: ITree, element: TaskNode): string {
|
||||
return element.id;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -57,6 +60,7 @@ export class TaskHistoryRenderer implements IRenderer {
|
||||
taskTemplate.label = dom.append(taskTemplate.root, $('.label'));
|
||||
taskTemplate.description = dom.append(taskTemplate.root, $('.description'));
|
||||
taskTemplate.time = dom.append(taskTemplate.root, $('.time'));
|
||||
taskTemplate.disposables = [];
|
||||
return taskTemplate;
|
||||
}
|
||||
|
||||
@@ -108,15 +112,15 @@ export class TaskHistoryRenderer implements IRenderer {
|
||||
templateData.description.textContent = description;
|
||||
templateData.description.title = templateData.description.textContent;
|
||||
|
||||
this.timer(element, templateData);
|
||||
let self = this;
|
||||
setInterval(function () {
|
||||
self.timer(element, templateData);
|
||||
}, 1000);
|
||||
this.timer(element, templateData.time);
|
||||
|
||||
const timer = new IntervalTimer();
|
||||
timer.cancelAndSet(() => this.timer(element, templateData.time), 1000);
|
||||
templateData.disposables.push(timer);
|
||||
}
|
||||
}
|
||||
|
||||
public timer(taskNode: TaskNode, templateData: ITaskHistoryTemplateData) {
|
||||
private timer(taskNode: TaskNode, element: HTMLElement): void {
|
||||
let timeLabel = '';
|
||||
if (taskNode.status === TaskStatus.Failed) {
|
||||
timeLabel += taskNode.startTime + ' Error: ' + taskNode.message;
|
||||
@@ -134,12 +138,11 @@ export class TaskHistoryRenderer implements IRenderer {
|
||||
timeLabel += ' (' + Utils.parseNumAsTimeString(duration) + ')';
|
||||
}
|
||||
}
|
||||
templateData.time.textContent = timeLabel;
|
||||
templateData.time.title = timeLabel;
|
||||
element.textContent = timeLabel;
|
||||
element.title = timeLabel;
|
||||
}
|
||||
|
||||
public disposeTemplate(tree: ITree, templateId: string, templateData: any): void {
|
||||
// no op
|
||||
// InputBox disposed in wrapUp
|
||||
public disposeTemplate(tree: ITree, templateId: string, templateData: ITaskHistoryTemplateData): void {
|
||||
dispose(templateData.disposables);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user