blob: 5ec2e6f7e2104e105344c6e3198c16ae0453d2f3 [file] [log] [blame]
class OwnedCommitViewer extends ComponentBase {
constructor(previousCommit, currentCommit)
{
super('owned-commit-viewer');
this._previousCommit = previousCommit;
this._currentCommit = currentCommit;
this._previousOwnedCommits = null;
this._currentOwnedCommits = null;
this._showingOwnedCommits = false;
this._renderOwnedCommitTableLazily = new LazilyEvaluatedFunction(this._renderOwnedCommitTable.bind(this));
}
didConstructShadowTree()
{
this.part('expand-collapse').listenToAction('toggle', (expanded) => this._toggleVisibility(expanded));
}
_toggleVisibility(expanded)
{
this._showingOwnedCommits = expanded;
this.enqueueToRender();
Promise.all([this._previousCommit.fetchOwnedCommits(), this._currentCommit.fetchOwnedCommits()]).then((ownedCommitsList) => {
this._previousOwnedCommits = ownedCommitsList[0];
this._currentOwnedCommits = ownedCommitsList[1];
this.enqueueToRender();
});
}
render()
{
const hideSpinner = (this._previousOwnedCommits && this._currentOwnedCommits) || !this._showingOwnedCommits;
this.content('difference-entries').style.display = this._showingOwnedCommits ? null : 'none';
this.content('spinner-container').style.display = hideSpinner ? 'none' : null;
this.content('difference-table').style.display = this._showingOwnedCommits ? null : 'none';
this._renderOwnedCommitTableLazily.evaluate(this._previousOwnedCommits, this._currentOwnedCommits);
}
_renderOwnedCommitTable(previousOwnedCommits, currentOwnedCommits)
{
if (!previousOwnedCommits || !currentOwnedCommits)
return;
const difference = CommitLog.ownedCommitDifferenceForOwnerCommits(this._previousCommit, this._currentCommit);
const sortedRepositories = Repository.sortByName([...difference.keys()]);
const element = ComponentBase.createElement;
const tableEntries = sortedRepositories.map((repository) => {
const revisions = difference.get(repository);
return element('tr', [element('td', repository.name()),
element('td', revisions[0] ? revisions[0].revision() : ''),
element('td', revisions[1] ? revisions[1].revision() : '')]);
});
this.renderReplace(this.content('difference-entries'), tableEntries);
}
static htmlTemplate()
{
return `
<expand-collapse-button id="expand-collapse"></expand-collapse-button>
<table id="difference-table">
<tbody id="difference-entries"></tbody>
</table>
<div id="spinner-container"><spinner-icon id="spinner"></spinner-icon></div>`;
}
static cssTemplate() {
return `
:host {
display: block;
font-size: 0.8rem;
font-weight: normal;
}
expand-collapse-button {
margin-left: calc(50% - 0.8rem);
display: block;
}
td, th {
padding: 0.2rem;
margin: 0;
border-top: solid 1px #ccc;
}
#difference-table {
width: 100%;
}
#spinner-container {
text-align: center;
}`;
}
}
ComponentBase.defineElement('owned-commit-viewer', OwnedCommitViewer);