gather-content-ui
Version:
GatherContent UI Library
50 lines (49 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useShiftSelect = useShiftSelect;
var _react = require("react");
var _lodash = require("lodash");
var _ = require("..");
function useShiftSelect(id, ids, type) {
var idsData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var _useContext = (0, _react.useContext)(_.SelectionContext),
selected = _useContext.selected,
currentSelectedType = _useContext.currentSelectedType,
selectMultiple = _useContext.selectMultiple,
deselectMultiple = _useContext.deselectMultiple,
lastInteracted = _useContext.lastInteracted,
setLastInteracted = _useContext.setLastInteracted;
var _useObjectSelector = (0, _.useObjectSelector)(id, type, [id], function () {
return false;
}, (0, _lodash.pick)(idsData, [id])),
isSelected = _useObjectSelector.isSelected,
handleClick = _useObjectSelector.handleClick;
var handleSelection = function handleSelection(e) {
setLastInteracted(id);
if (!e.shiftKey || selected.length === 0 || id === lastInteracted) {
// @ts-expect-error TS(2554): Expected 0 arguments, but got 1.
handleClick(e);
} else {
var selectedIndex = ids.indexOf(id);
var lastInteractedIndex = ids.indexOf(lastInteracted);
var selectUp = lastInteractedIndex < selectedIndex;
var sliceStart = selectUp ? lastInteractedIndex : selectedIndex;
var sliceEnd = selectUp ? selectedIndex : lastInteractedIndex;
var interactedIds = ids.slice(sliceStart, sliceEnd + 1);
var interactedData = (0, _lodash.pick)(idsData, interactedIds);
if (isSelected) {
deselectMultiple(interactedIds);
} else {
selectMultiple(interactedIds, currentSelectedType, interactedData);
}
}
};
return {
handleSelection: handleSelection,
isSelected: isSelected,
selected: selected
};
}
//# sourceMappingURL=useShiftSelect.js.map