From 617d90757e209a5e476f319756b200aa4fd24bf8 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Thu, 23 Jun 2016 17:50:23 +0300 Subject: [PATCH] Save selected indexes as hash + range, to not eat memory on very long lists --- mail.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/mail.js b/mail.js index 8e6e666..2d68144 100644 --- a/mail.js +++ b/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({ {this.state.attachments.map((a, i) =>
+ className={'attachment'+(this.isSelected(i) ? ' selected' : '')} onMouseDown={this.onListItemClick}>
{a.name}
{formatBytes(a.size)}