blob: 1bf043cd715da42170d13eb2d9d4b01ba1d23685 [file] [log] [blame]
class AnalysisTaskBugList extends ComponentBase {
constructor()
{
super('analysis-task-bug-list');
this._task = null;
}
setTask(task)
{
console.assert(task == null || task instanceof AnalysisTask);
this._task = task;
this.enqueueToRender();
}
didConstructShadowTree()
{
this.part('bug-list').setKindList(BugTracker.all());
this.part('bug-list').listenToAction('addItem', (tracker, bugNumber) => this._associateBug(tracker, bugNumber));
}
render()
{
const bugList = this._task ? this._task.bugs().map((bug) => {
return new MutableListItem(bug.bugTracker(), bug.label(), bug.title(), bug.url(),
'Dissociate this bug', () => this._dissociateBug(bug));
}) : [];
this.part('bug-list').setList(bugList);
}
_associateBug(tracker, bugNumber)
{
console.assert(tracker instanceof BugTracker);
bugNumber = parseInt(bugNumber);
return this._task.associateBug(tracker, bugNumber).then(() => this.enqueueToRender(), (error) => {
this.enqueueToRender();
alert('Failed to associate the bug: ' + error);
});
}
_dissociateBug(bug)
{
return this._task.dissociateBug(bug).then(() => this.enqueueToRender(), (error) => {
this.enqueueToRender();
alert('Failed to dissociate the bug: ' + error);
});
}
static htmlTemplate() { return `<mutable-list-view id="bug-list"></mutable-list-view>`; }
}
ComponentBase.defineElement('analysis-task-bug-list', AnalysisTaskBugList);