Save selected indexes as hash + range, to not eat memory on very long lists
parent
3cd3685448
commit
617d90757e
21
mail.js
21
mail.js
|
@ -745,6 +745,11 @@ var ListWithSelection = {
|
|||
selected: {}
|
||||
};
|
||||
},
|
||||
isSelected: function(i)
|
||||
{
|
||||
return this.state.selected[i] || this.state.selected.begin !== undefined &&
|
||||
this.state.selected.begin <= i && this.state.selected.end >= i;
|
||||
},
|
||||
onListKeyDown: function(ev)
|
||||
{
|
||||
if (!this.getTotalItems())
|
||||
|
@ -812,19 +817,15 @@ var ListWithSelection = {
|
|||
{
|
||||
if (this.lastSel === undefined)
|
||||
return this.selectOne(ns);
|
||||
var sel = { ns: 1 };
|
||||
var sel = {};
|
||||
if (this.lastSel >= this.getTotalItems())
|
||||
this.lastSel = this.getTotalItems()-1;
|
||||
if (ns < this.lastSel)
|
||||
{
|
||||
for (var i = ns; i <= this.lastSel; i++)
|
||||
sel[i] = true;
|
||||
}
|
||||
sel = { begin: ns, end: this.lastSel };
|
||||
else if (ns > this.lastSel)
|
||||
{
|
||||
for (var i = this.lastSel; i <= ns; i++)
|
||||
sel[i] = true;
|
||||
}
|
||||
sel = { begin: this.lastSel, end: ns };
|
||||
else
|
||||
sel[ns] = true;
|
||||
this.setState({ selected: sel });
|
||||
this.curSel = ns;
|
||||
},
|
||||
|
@ -923,7 +924,7 @@ var AttachList = React.createClass({
|
|||
</div>
|
||||
{this.state.attachments.map((a, i) =>
|
||||
<div ref={'a'+i} title={a.name+' ('+formatBytes(a.size)+')'} key={'a'+i} data-i={i}
|
||||
className={'attachment'+(this.state.selected[i] ? ' selected' : '')} onMouseDown={this.onListItemClick}>
|
||||
className={'attachment'+(this.isSelected(i) ? ' selected' : '')} onMouseDown={this.onListItemClick}>
|
||||
<div className="name">{a.name}</div>
|
||||
<div className="size">{formatBytes(a.size)}</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue