UNPKG

ldx-widgets

Version:

widgets

111 lines (107 loc) 3.52 kB
(function() { var sortBy; sortBy = require('lodash/sortBy'); module.exports = { getInitialState: function() { return { selectedItems: [], startingPointItem: { index: 2e308 } }; }, getSelectedItemIndex: function(id) { var i, index, item, len, ref; ref = this.state.selectedItems; for (index = i = 0, len = ref.length; i < len; index = ++i) { item = ref[index]; if (item.id === id) { return index; } } }, clearSelections: function() { return this.setState({ selectedItems: [] }); }, selectItem: function(item, e, cb) { var id, index, itemIndex, ref, selectedItems, sortedSelectedItems, startingPointItem, state; if (e == null) { e = {}; } id = item.id, index = item.index; ref = this.state, startingPointItem = ref.startingPointItem, selectedItems = ref.selectedItems; itemIndex = this.getSelectedItemIndex(id); state = {}; if (typeof e.preventDefault === "function") { e.preventDefault(); } if (typeof e.persist === "function") { e.persist(); } if (e.shiftKey) { return this.groupSelectItems(item); } if (!(e.metaKey || e.ctrlKey)) { selectedItems = []; } if (!selectedItems.length) { state.startingPointItem = item; } else if (selectedItems.length && index < startingPointItem.index) { state.startingPointItem = item; } if ((e.metaKey || e.ctrlKey) && itemIndex > -1) { selectedItems.splice(itemIndex, 1); sortedSelectedItems = sortBy(selectedItems, 'index'); if (index === startingPointItem.index) { state.startingPointItem = sortedSelectedItems[0]; } } else { selectedItems.push(item); } state.selectedItems = selectedItems; return this.setState(state, function() { return typeof cb === "function" ? cb(e.clientX, e.clientY) : void 0; }); }, groupSelectItems: function(item) { var i, id, index, j, len, record, records, ref, ref1, ref2, selectedItems, startingPointItem; id = item.id, index = item.index; ref = this.state, startingPointItem = ref.startingPointItem, selectedItems = ref.selectedItems; records = this.props.records || this.records; if (startingPointItem.id != null) { selectedItems = []; selectedItems.push(startingPointItem); if (index < startingPointItem.index) { ref1 = records.slice(index, +startingPointItem.index + 1 || 9e9); for (i = ref1.length - 1; i >= 0; i += -1) { record = ref1[i]; if (record.id !== startingPointItem.id) { selectedItems.push({ id: record.id, index: index, record: record }); } } } else if (index > startingPointItem.index) { ref2 = records.slice(startingPointItem.index, +index + 1 || 9e9); for (j = 0, len = ref2.length; j < len; j++) { record = ref2[j]; if (record.id !== startingPointItem.id) { selectedItems.push({ id: record.id, index: index, record: record }); } } } return this.setState({ selectedItems: selectedItems }); } } }; }).call(this);