mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -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 * as dom from 'vs/base/browser/dom';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import * as Utils from 'sql/platform/connection/common/utils';
|
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.$;
|
const $ = dom.$;
|
||||||
|
|
||||||
@@ -17,6 +19,7 @@ export interface ITaskHistoryTemplateData {
|
|||||||
label: HTMLSpanElement;
|
label: HTMLSpanElement;
|
||||||
description: HTMLSpanElement;
|
description: HTMLSpanElement;
|
||||||
time: 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.
|
* 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;
|
return TaskHistoryRenderer.TASKOBJECT_HEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a template ID for a given element.
|
* Returns a template ID for a given element.
|
||||||
*/
|
*/
|
||||||
public getTemplateId(tree: ITree, element: any): string {
|
public getTemplateId(tree: ITree, element: TaskNode): string {
|
||||||
return TaskHistoryRenderer.TASKOBJECT_TEMPLATE_ID;
|
return element.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,6 +60,7 @@ export class TaskHistoryRenderer implements IRenderer {
|
|||||||
taskTemplate.label = dom.append(taskTemplate.root, $('.label'));
|
taskTemplate.label = dom.append(taskTemplate.root, $('.label'));
|
||||||
taskTemplate.description = dom.append(taskTemplate.root, $('.description'));
|
taskTemplate.description = dom.append(taskTemplate.root, $('.description'));
|
||||||
taskTemplate.time = dom.append(taskTemplate.root, $('.time'));
|
taskTemplate.time = dom.append(taskTemplate.root, $('.time'));
|
||||||
|
taskTemplate.disposables = [];
|
||||||
return taskTemplate;
|
return taskTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,15 +112,15 @@ export class TaskHistoryRenderer implements IRenderer {
|
|||||||
templateData.description.textContent = description;
|
templateData.description.textContent = description;
|
||||||
templateData.description.title = templateData.description.textContent;
|
templateData.description.title = templateData.description.textContent;
|
||||||
|
|
||||||
this.timer(element, templateData);
|
this.timer(element, templateData.time);
|
||||||
let self = this;
|
|
||||||
setInterval(function () {
|
const timer = new IntervalTimer();
|
||||||
self.timer(element, templateData);
|
timer.cancelAndSet(() => this.timer(element, templateData.time), 1000);
|
||||||
}, 1000);
|
templateData.disposables.push(timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public timer(taskNode: TaskNode, templateData: ITaskHistoryTemplateData) {
|
private timer(taskNode: TaskNode, element: HTMLElement): void {
|
||||||
let timeLabel = '';
|
let timeLabel = '';
|
||||||
if (taskNode.status === TaskStatus.Failed) {
|
if (taskNode.status === TaskStatus.Failed) {
|
||||||
timeLabel += taskNode.startTime + ' Error: ' + taskNode.message;
|
timeLabel += taskNode.startTime + ' Error: ' + taskNode.message;
|
||||||
@@ -134,12 +138,11 @@ export class TaskHistoryRenderer implements IRenderer {
|
|||||||
timeLabel += ' (' + Utils.parseNumAsTimeString(duration) + ')';
|
timeLabel += ' (' + Utils.parseNumAsTimeString(duration) + ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
templateData.time.textContent = timeLabel;
|
element.textContent = timeLabel;
|
||||||
templateData.time.title = timeLabel;
|
element.title = timeLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public disposeTemplate(tree: ITree, templateId: string, templateData: any): void {
|
public disposeTemplate(tree: ITree, templateId: string, templateData: ITaskHistoryTemplateData): void {
|
||||||
// no op
|
dispose(templateData.disposables);
|
||||||
// InputBox disposed in wrapUp
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user