Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

198 строки
8.3 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  6. var _react = require('react');
  7. var _react2 = _interopRequireDefault(_react);
  8. var _propTypes = require('prop-types');
  9. var _propTypes2 = _interopRequireDefault(_propTypes);
  10. var _classnames = require('classnames');
  11. var _classnames2 = _interopRequireDefault(_classnames);
  12. var _objectAssign = require('object-assign');
  13. var _objectAssign2 = _interopRequireDefault(_objectAssign);
  14. var _actions = require('./actions');
  15. var _helpers = require('./helpers');
  16. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  18. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  19. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  20. var ContextMenuTrigger = function (_Component) {
  21. _inherits(ContextMenuTrigger, _Component);
  22. function ContextMenuTrigger() {
  23. var _ref;
  24. var _temp, _this, _ret;
  25. _classCallCheck(this, ContextMenuTrigger);
  26. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  27. args[_key] = arguments[_key];
  28. }
  29. return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ContextMenuTrigger.__proto__ || Object.getPrototypeOf(ContextMenuTrigger)).call.apply(_ref, [this].concat(args))), _this), _this.touchHandled = false, _this.handleMouseDown = function (event) {
  30. if (_this.props.holdToDisplay >= 0 && event.button === 0) {
  31. event.persist();
  32. event.stopPropagation();
  33. _this.mouseDownTimeoutId = setTimeout(function () {
  34. return _this.handleContextClick(event);
  35. }, _this.props.holdToDisplay);
  36. }
  37. (0, _helpers.callIfExists)(_this.props.attributes.onMouseDown, event);
  38. }, _this.handleMouseUp = function (event) {
  39. if (event.button === 0) {
  40. clearTimeout(_this.mouseDownTimeoutId);
  41. }
  42. (0, _helpers.callIfExists)(_this.props.attributes.onMouseUp, event);
  43. }, _this.handleMouseOut = function (event) {
  44. if (event.button === 0) {
  45. clearTimeout(_this.mouseDownTimeoutId);
  46. }
  47. (0, _helpers.callIfExists)(_this.props.attributes.onMouseOut, event);
  48. }, _this.handleTouchstart = function (event) {
  49. _this.touchHandled = false;
  50. if (_this.props.holdToDisplay >= 0) {
  51. event.persist();
  52. event.stopPropagation();
  53. _this.touchstartTimeoutId = setTimeout(function () {
  54. _this.handleContextClick(event);
  55. _this.touchHandled = true;
  56. }, _this.props.holdToDisplay);
  57. }
  58. (0, _helpers.callIfExists)(_this.props.attributes.onTouchStart, event);
  59. }, _this.handleTouchEnd = function (event) {
  60. if (_this.touchHandled) {
  61. event.preventDefault();
  62. }
  63. clearTimeout(_this.touchstartTimeoutId);
  64. (0, _helpers.callIfExists)(_this.props.attributes.onTouchEnd, event);
  65. }, _this.handleContextMenu = function (event) {
  66. if (event.button === _this.props.mouseButton) {
  67. _this.handleContextClick(event);
  68. }
  69. (0, _helpers.callIfExists)(_this.props.attributes.onContextMenu, event);
  70. }, _this.handleMouseClick = function (event) {
  71. if (event.button === _this.props.mouseButton) {
  72. _this.handleContextClick(event);
  73. }
  74. (0, _helpers.callIfExists)(_this.props.attributes.onClick, event);
  75. }, _this.handleContextClick = function (event) {
  76. if (_this.props.disable) return;
  77. if (_this.props.disableIfShiftIsPressed && event.shiftKey) return;
  78. event.preventDefault();
  79. event.stopPropagation();
  80. var x = event.clientX || event.touches && event.touches[0].pageX;
  81. var y = event.clientY || event.touches && event.touches[0].pageY;
  82. if (_this.props.posX) {
  83. x -= _this.props.posX;
  84. }
  85. if (_this.props.posY) {
  86. y -= _this.props.posY;
  87. }
  88. (0, _actions.hideMenu)();
  89. var data = (0, _helpers.callIfExists)(_this.props.collect, _this.props);
  90. var showMenuConfig = {
  91. position: { x: x, y: y },
  92. target: _this.elem,
  93. id: _this.props.id
  94. };
  95. if (data && typeof data.then === 'function') {
  96. // it's promise
  97. data.then(function (resp) {
  98. showMenuConfig.data = (0, _objectAssign2.default)({}, resp, {
  99. target: event.target
  100. });
  101. (0, _actions.showMenu)(showMenuConfig);
  102. });
  103. } else {
  104. showMenuConfig.data = (0, _objectAssign2.default)({}, data, {
  105. target: event.target
  106. });
  107. (0, _actions.showMenu)(showMenuConfig);
  108. }
  109. }, _this.elemRef = function (c) {
  110. _this.elem = c;
  111. }, _temp), _possibleConstructorReturn(_this, _ret);
  112. }
  113. _createClass(ContextMenuTrigger, [{
  114. key: 'render',
  115. value: function render() {
  116. var _props = this.props,
  117. renderTag = _props.renderTag,
  118. attributes = _props.attributes,
  119. children = _props.children;
  120. var newAttrs = (0, _objectAssign2.default)({}, attributes, {
  121. className: (0, _classnames2.default)(_helpers.cssClasses.menuWrapper, attributes.className),
  122. onContextMenu: this.handleContextMenu,
  123. onClick: this.handleMouseClick,
  124. onMouseDown: this.handleMouseDown,
  125. onMouseUp: this.handleMouseUp,
  126. onTouchStart: this.handleTouchstart,
  127. onTouchEnd: this.handleTouchEnd,
  128. onMouseOut: this.handleMouseOut,
  129. ref: this.elemRef
  130. });
  131. return _react2.default.createElement(renderTag, newAttrs, children);
  132. }
  133. }]);
  134. return ContextMenuTrigger;
  135. }(_react.Component);
  136. ContextMenuTrigger.propTypes = {
  137. id: _propTypes2.default.string.isRequired,
  138. children: _propTypes2.default.node.isRequired,
  139. attributes: _propTypes2.default.object,
  140. collect: _propTypes2.default.func,
  141. disable: _propTypes2.default.bool,
  142. holdToDisplay: _propTypes2.default.number,
  143. posX: _propTypes2.default.number,
  144. posY: _propTypes2.default.number,
  145. renderTag: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]),
  146. mouseButton: _propTypes2.default.number,
  147. disableIfShiftIsPressed: _propTypes2.default.bool
  148. };
  149. ContextMenuTrigger.defaultProps = {
  150. attributes: {},
  151. collect: function collect() {
  152. return null;
  153. },
  154. disable: false,
  155. holdToDisplay: 1000,
  156. renderTag: 'div',
  157. posX: 0,
  158. posY: 0,
  159. mouseButton: 2, // 0 is left click, 2 is right click
  160. disableIfShiftIsPressed: false
  161. };
  162. exports.default = ContextMenuTrigger;