PreviewGroup.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. var _typeof3 = require("@babel/runtime/helpers/typeof");
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = void 0;
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  10. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  11. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  12. var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
  13. var _react = _interopRequireWildcard(require("react"));
  14. var React = _react;
  15. var _Preview = _interopRequireDefault(require("./Preview"));
  16. var _context = require("./context");
  17. var _usePreviewItems3 = _interopRequireDefault(require("./hooks/usePreviewItems"));
  18. var _excluded = ["visible", "onVisibleChange", "getContainer", "current", "movable", "minScale", "maxScale", "countRender", "closeIcon", "onChange", "onTransform", "toolbarRender", "imageRender"],
  19. _excluded2 = ["src"];
  20. function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
  21. function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
  22. var Group = function Group(_ref) {
  23. var _mergedItems$current;
  24. var _ref$previewPrefixCls = _ref.previewPrefixCls,
  25. previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls,
  26. children = _ref.children,
  27. _ref$icons = _ref.icons,
  28. icons = _ref$icons === void 0 ? {} : _ref$icons,
  29. items = _ref.items,
  30. preview = _ref.preview,
  31. fallback = _ref.fallback;
  32. var _ref2 = (0, _typeof2.default)(preview) === 'object' ? preview : {},
  33. previewVisible = _ref2.visible,
  34. onVisibleChange = _ref2.onVisibleChange,
  35. getContainer = _ref2.getContainer,
  36. currentIndex = _ref2.current,
  37. movable = _ref2.movable,
  38. minScale = _ref2.minScale,
  39. maxScale = _ref2.maxScale,
  40. countRender = _ref2.countRender,
  41. closeIcon = _ref2.closeIcon,
  42. onChange = _ref2.onChange,
  43. onTransform = _ref2.onTransform,
  44. toolbarRender = _ref2.toolbarRender,
  45. imageRender = _ref2.imageRender,
  46. dialogProps = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
  47. // ========================== Items ===========================
  48. var _usePreviewItems = (0, _usePreviewItems3.default)(items),
  49. _usePreviewItems2 = (0, _slicedToArray2.default)(_usePreviewItems, 3),
  50. mergedItems = _usePreviewItems2[0],
  51. register = _usePreviewItems2[1],
  52. fromItems = _usePreviewItems2[2];
  53. // ========================= Preview ==========================
  54. // >>> Index
  55. var _useMergedState = (0, _useMergedState5.default)(0, {
  56. value: currentIndex
  57. }),
  58. _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
  59. current = _useMergedState2[0],
  60. setCurrent = _useMergedState2[1];
  61. var _useState = (0, _react.useState)(false),
  62. _useState2 = (0, _slicedToArray2.default)(_useState, 2),
  63. keepOpenIndex = _useState2[0],
  64. setKeepOpenIndex = _useState2[1];
  65. // >>> Image
  66. var _ref3 = ((_mergedItems$current = mergedItems[current]) === null || _mergedItems$current === void 0 ? void 0 : _mergedItems$current.data) || {},
  67. src = _ref3.src,
  68. imgCommonProps = (0, _objectWithoutProperties2.default)(_ref3, _excluded2);
  69. // >>> Visible
  70. var _useMergedState3 = (0, _useMergedState5.default)(!!previewVisible, {
  71. value: previewVisible,
  72. onChange: function onChange(val, prevVal) {
  73. onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(val, prevVal, current);
  74. }
  75. }),
  76. _useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
  77. isShowPreview = _useMergedState4[0],
  78. setShowPreview = _useMergedState4[1];
  79. // >>> Position
  80. var _useState3 = (0, _react.useState)(null),
  81. _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
  82. mousePosition = _useState4[0],
  83. setMousePosition = _useState4[1];
  84. var onPreviewFromImage = React.useCallback(function (id, imageSrc, mouseX, mouseY) {
  85. var index = fromItems ? mergedItems.findIndex(function (item) {
  86. return item.data.src === imageSrc;
  87. }) : mergedItems.findIndex(function (item) {
  88. return item.id === id;
  89. });
  90. setCurrent(index < 0 ? 0 : index);
  91. setShowPreview(true);
  92. setMousePosition({
  93. x: mouseX,
  94. y: mouseY
  95. });
  96. setKeepOpenIndex(true);
  97. }, [mergedItems, fromItems]);
  98. // Reset current when reopen
  99. React.useEffect(function () {
  100. if (isShowPreview) {
  101. if (!keepOpenIndex) {
  102. setCurrent(0);
  103. }
  104. } else {
  105. setKeepOpenIndex(false);
  106. }
  107. }, [isShowPreview]);
  108. // ========================== Events ==========================
  109. var onInternalChange = function onInternalChange(next, prev) {
  110. setCurrent(next);
  111. onChange === null || onChange === void 0 || onChange(next, prev);
  112. };
  113. var onPreviewClose = function onPreviewClose() {
  114. setShowPreview(false);
  115. setMousePosition(null);
  116. };
  117. // ========================= Context ==========================
  118. var previewGroupContext = React.useMemo(function () {
  119. return {
  120. register: register,
  121. onPreview: onPreviewFromImage
  122. };
  123. }, [register, onPreviewFromImage]);
  124. // ========================== Render ==========================
  125. return /*#__PURE__*/React.createElement(_context.PreviewGroupContext.Provider, {
  126. value: previewGroupContext
  127. }, children, /*#__PURE__*/React.createElement(_Preview.default, (0, _extends2.default)({
  128. "aria-hidden": !isShowPreview,
  129. movable: movable,
  130. visible: isShowPreview,
  131. prefixCls: previewPrefixCls,
  132. closeIcon: closeIcon,
  133. onClose: onPreviewClose,
  134. mousePosition: mousePosition,
  135. imgCommonProps: imgCommonProps,
  136. src: src,
  137. fallback: fallback,
  138. icons: icons,
  139. minScale: minScale,
  140. maxScale: maxScale,
  141. getContainer: getContainer,
  142. current: current,
  143. count: mergedItems.length,
  144. countRender: countRender,
  145. onTransform: onTransform,
  146. toolbarRender: toolbarRender,
  147. imageRender: imageRender,
  148. onChange: onInternalChange
  149. }, dialogProps)));
  150. };
  151. var _default = exports.default = Group;