UNPKG

react-beautiful-dnd

Version:

Beautiful, accessible drag and drop for lists with React.js

107 lines (80 loc) 3.13 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeSelector = undefined; var _reactRedux = require('react-redux'); var _reselect = require('reselect'); var _memoizeOne = require('memoize-one'); var _memoizeOne2 = _interopRequireDefault(_memoizeOne); var _contextKeys = require('../context-keys'); var _selectors = require('../../state/selectors'); var _droppable = require('./droppable'); var _droppable2 = _interopRequireDefault(_droppable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var makeSelector = exports.makeSelector = function makeSelector() { var idSelector = function idSelector(state, ownProps) { return ownProps.droppableId; }; var isDropDisabledSelector = function isDropDisabledSelector(state, ownProps) { return ownProps.isDropDisabled || false; }; var getIsDraggingOver = (0, _memoizeOne2.default)(function (id, destination) { if (!destination) { return false; } return destination.droppableId === id; }); var getPlaceholder = (0, _memoizeOne2.default)(function (id, destination, draggable) { if (!draggable) { return null; } if (!destination) { return null; } if (id === draggable.descriptor.droppableId) { return null; } if (id !== destination.droppableId) { return null; } return draggable.placeholder; }); var getMapProps = (0, _memoizeOne2.default)(function (isDraggingOver, placeholder) { return { isDraggingOver: isDraggingOver, placeholder: placeholder }; }); return (0, _reselect.createSelector)([_selectors.phaseSelector, _selectors.dragSelector, _selectors.draggingDraggableSelector, _selectors.pendingDropSelector, idSelector, isDropDisabledSelector], function (phase, drag, draggable, pending, id, isDropDisabled) { if (isDropDisabled) { return getMapProps(false, null); } if (phase === 'DRAGGING') { if (!drag) { console.error('cannot determine dragging over as there is not drag'); return getMapProps(false, null); } var isDraggingOver = getIsDraggingOver(id, drag.impact.destination); var placeholder = getPlaceholder(id, drag.impact.destination, draggable); return getMapProps(isDraggingOver, placeholder); } if (phase === 'DROP_ANIMATING') { if (!pending) { console.error('cannot determine dragging over as there is no pending result'); return getMapProps(false, null); } var _isDraggingOver = getIsDraggingOver(id, pending.impact.destination); var _placeholder = getPlaceholder(id, pending.result.destination, draggable); return getMapProps(_isDraggingOver, _placeholder); } return getMapProps(false, null); }); }; var makeMapStateToProps = function makeMapStateToProps() { var selector = makeSelector(); return function (state, props) { return selector(state, props); }; }; exports.default = (0, _reactRedux.connect)(makeMapStateToProps, null, null, { storeKey: _contextKeys.storeKey })(_droppable2.default);