feat(SortedTable): support range selection with shift key (#2328)

Fixes #2323
This commit is contained in:
Julien Fontanet
2017-08-31 17:25:48 +02:00
committed by GitHub
parent 4d2dc4eece
commit 289112af27

View File

@@ -328,10 +328,33 @@ export default class SortedTable extends Component {
}
_selectItem = event => {
const { checked, name } = event.target
this.setState({
selectedItemsIds: this.state.selectedItemsIds[checked ? 'add' : 'delete'](name)
const { selectedItemsIds } = this.state
const { target } = event
const visibleItems = this._getVisibleItems()
const current = +target.name
let method = target.checked ? 'add' : 'delete'
let previous
this.setState({ selectedItemsIds:
(
event.nativeEvent.shiftKey &&
(previous = this._previous) !== undefined
) ? selectedItemsIds.withMutations(selectedItemsIds => {
let i = previous
let end = current
if (previous > current) {
i = current
end = previous
}
for (; i <= end; ++i) {
selectedItemsIds[method](visibleItems[i].id)
}
})
: selectedItemsIds[method](visibleItems[current].id)
})
this._previous = current
}
_onFilterChange = debounce(filter => {
@@ -457,7 +480,7 @@ export default class SortedTable extends Component {
const selectionColumn = hasGroupedActions && <td>
<input
checked={state.selectedItemsIds.has(id)}
name={id}
name={i} // position in visible items
onChange={this._selectItem}
type='checkbox'
/>