UNPKG

react-beautiful-dnd

Version:

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

125 lines (93 loc) 2.61 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _memoizeOne = require('memoize-one'); var _memoizeOne2 = _interopRequireDefault(_memoizeOne); var _getStyles = require('./get-styles'); var _getStyles2 = _interopRequireDefault(_getStyles); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var count = 0; var prefix = 'data-react-beautiful-dnd'; exports.default = function () { var context = '' + count++; var styles = (0, _getStyles2.default)(context); var state = { el: null }; var setState = function setState(newState) { state = newState; }; var setStyle = (0, _memoizeOne2.default)(function (proposed) { if (!state.el) { console.error('cannot set style of style tag if not mounted'); return; } state.el.innerHTML = proposed; }); var mount = function mount() { if (state.el) { console.error('Style marshal already mounted'); return; } var el = document.createElement('style'); el.type = 'text/css'; el.setAttribute(prefix, context); var head = document.querySelector('head'); if (!head) { throw new Error('Cannot find the head to append a style to'); } head.appendChild(el); setState({ el: el }); setStyle(styles.resting); }; var onPhaseChange = function onPhaseChange(current) { if (!state.el) { console.error('cannot update styles until style marshal is mounted'); return; } var phase = current.phase; if (phase === 'DRAGGING') { setStyle(styles.dragging); return; } if (phase === 'DROP_ANIMATING') { if (!current.drop || !current.drop.pending) { console.error('Invalid state found in style-marshal'); return; } var trigger = current.drop.pending.trigger; if (trigger === 'DROP') { setStyle(styles.dropAnimating); return; } setStyle(styles.userCancel); return; } setStyle(styles.resting); }; var unmount = function unmount() { if (!state.el) { console.error('Cannot unmount style marshal as it is already unmounted'); return; } var previous = state.el; setState({ el: null }); if (!previous.parentNode) { console.error('Cannot unmount style marshal as cannot find parent'); return; } previous.parentNode.removeChild(previous); }; var marshal = { onPhaseChange: onPhaseChange, styleContext: context, mount: mount, unmount: unmount }; return marshal; };