Image.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  11. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  12. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  13. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  14. var _classnames = _interopRequireDefault(require("classnames"));
  15. var _css = require("rc-util/lib/Dom/css");
  16. var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
  17. var _react = _interopRequireWildcard(require("react"));
  18. var React = _react;
  19. var _Preview = _interopRequireDefault(require("./Preview"));
  20. var _PreviewGroup = _interopRequireDefault(require("./PreviewGroup"));
  21. var _common = require("./common");
  22. var _context = require("./context");
  23. var _useRegisterImage = _interopRequireDefault(require("./hooks/useRegisterImage"));
  24. var _useStatus3 = _interopRequireDefault(require("./hooks/useStatus"));
  25. var _excluded = ["src", "alt", "onPreviewClose", "prefixCls", "previewPrefixCls", "placeholder", "fallback", "width", "height", "style", "preview", "className", "onClick", "onError", "wrapperClassName", "wrapperStyle", "rootClassName"],
  26. _excluded2 = ["src", "visible", "onVisibleChange", "getContainer", "mask", "maskClassName", "movable", "icons", "scaleStep", "minScale", "maxScale", "imageRender", "toolbarRender"];
  27. 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); }
  28. 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; }
  29. var ImageInternal = function ImageInternal(props) {
  30. var imgSrc = props.src,
  31. alt = props.alt,
  32. onInitialPreviewClose = props.onPreviewClose,
  33. _props$prefixCls = props.prefixCls,
  34. prefixCls = _props$prefixCls === void 0 ? 'rc-image' : _props$prefixCls,
  35. _props$previewPrefixC = props.previewPrefixCls,
  36. previewPrefixCls = _props$previewPrefixC === void 0 ? "".concat(prefixCls, "-preview") : _props$previewPrefixC,
  37. placeholder = props.placeholder,
  38. fallback = props.fallback,
  39. width = props.width,
  40. height = props.height,
  41. style = props.style,
  42. _props$preview = props.preview,
  43. preview = _props$preview === void 0 ? true : _props$preview,
  44. className = props.className,
  45. onClick = props.onClick,
  46. onError = props.onError,
  47. wrapperClassName = props.wrapperClassName,
  48. wrapperStyle = props.wrapperStyle,
  49. rootClassName = props.rootClassName,
  50. otherProps = (0, _objectWithoutProperties2.default)(props, _excluded);
  51. var isCustomPlaceholder = placeholder && placeholder !== true;
  52. var _ref = (0, _typeof2.default)(preview) === 'object' ? preview : {},
  53. previewSrc = _ref.src,
  54. _ref$visible = _ref.visible,
  55. previewVisible = _ref$visible === void 0 ? undefined : _ref$visible,
  56. _ref$onVisibleChange = _ref.onVisibleChange,
  57. onPreviewVisibleChange = _ref$onVisibleChange === void 0 ? onInitialPreviewClose : _ref$onVisibleChange,
  58. _ref$getContainer = _ref.getContainer,
  59. getPreviewContainer = _ref$getContainer === void 0 ? undefined : _ref$getContainer,
  60. previewMask = _ref.mask,
  61. maskClassName = _ref.maskClassName,
  62. movable = _ref.movable,
  63. icons = _ref.icons,
  64. scaleStep = _ref.scaleStep,
  65. minScale = _ref.minScale,
  66. maxScale = _ref.maxScale,
  67. imageRender = _ref.imageRender,
  68. toolbarRender = _ref.toolbarRender,
  69. dialogProps = (0, _objectWithoutProperties2.default)(_ref, _excluded2);
  70. var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc;
  71. var _useMergedState = (0, _useMergedState3.default)(!!previewVisible, {
  72. value: previewVisible,
  73. onChange: onPreviewVisibleChange
  74. }),
  75. _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
  76. isShowPreview = _useMergedState2[0],
  77. setShowPreview = _useMergedState2[1];
  78. var _useStatus = (0, _useStatus3.default)({
  79. src: imgSrc,
  80. isCustomPlaceholder: isCustomPlaceholder,
  81. fallback: fallback
  82. }),
  83. _useStatus2 = (0, _slicedToArray2.default)(_useStatus, 3),
  84. getImgRef = _useStatus2[0],
  85. srcAndOnload = _useStatus2[1],
  86. status = _useStatus2[2];
  87. var _useState = (0, _react.useState)(null),
  88. _useState2 = (0, _slicedToArray2.default)(_useState, 2),
  89. mousePosition = _useState2[0],
  90. setMousePosition = _useState2[1];
  91. var groupContext = (0, _react.useContext)(_context.PreviewGroupContext);
  92. var canPreview = !!preview;
  93. var onPreviewClose = function onPreviewClose() {
  94. setShowPreview(false);
  95. setMousePosition(null);
  96. };
  97. var wrapperClass = (0, _classnames.default)(prefixCls, wrapperClassName, rootClassName, (0, _defineProperty2.default)({}, "".concat(prefixCls, "-error"), status === 'error'));
  98. // ========================= ImageProps =========================
  99. var imgCommonProps = (0, _react.useMemo)(function () {
  100. var obj = {};
  101. _common.COMMON_PROPS.forEach(function (prop) {
  102. if (props[prop] !== undefined) {
  103. obj[prop] = props[prop];
  104. }
  105. });
  106. return obj;
  107. }, _common.COMMON_PROPS.map(function (prop) {
  108. return props[prop];
  109. }));
  110. // ========================== Register ==========================
  111. var registerData = (0, _react.useMemo)(function () {
  112. return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, imgCommonProps), {}, {
  113. src: src
  114. });
  115. }, [src, imgCommonProps]);
  116. var imageId = (0, _useRegisterImage.default)(canPreview, registerData);
  117. // ========================== Preview ===========================
  118. var onPreview = function onPreview(e) {
  119. var _getOffset = (0, _css.getOffset)(e.target),
  120. left = _getOffset.left,
  121. top = _getOffset.top;
  122. if (groupContext) {
  123. groupContext.onPreview(imageId, src, left, top);
  124. } else {
  125. setMousePosition({
  126. x: left,
  127. y: top
  128. });
  129. setShowPreview(true);
  130. }
  131. onClick === null || onClick === void 0 || onClick(e);
  132. };
  133. // =========================== Render ===========================
  134. return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", (0, _extends2.default)({}, otherProps, {
  135. className: wrapperClass,
  136. onClick: canPreview ? onPreview : onClick,
  137. style: (0, _objectSpread2.default)({
  138. width: width,
  139. height: height
  140. }, wrapperStyle)
  141. }), /*#__PURE__*/React.createElement("img", (0, _extends2.default)({}, imgCommonProps, {
  142. className: (0, _classnames.default)("".concat(prefixCls, "-img"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-img-placeholder"), placeholder === true), className),
  143. style: (0, _objectSpread2.default)({
  144. height: height
  145. }, style),
  146. ref: getImgRef
  147. }, srcAndOnload, {
  148. width: width,
  149. height: height,
  150. onError: onError
  151. })), status === 'loading' && /*#__PURE__*/React.createElement("div", {
  152. "aria-hidden": "true",
  153. className: "".concat(prefixCls, "-placeholder")
  154. }, placeholder), previewMask && canPreview && /*#__PURE__*/React.createElement("div", {
  155. className: (0, _classnames.default)("".concat(prefixCls, "-mask"), maskClassName),
  156. style: {
  157. display: (style === null || style === void 0 ? void 0 : style.display) === 'none' ? 'none' : undefined
  158. }
  159. }, previewMask)), !groupContext && canPreview && /*#__PURE__*/React.createElement(_Preview.default, (0, _extends2.default)({
  160. "aria-hidden": !isShowPreview,
  161. visible: isShowPreview,
  162. prefixCls: previewPrefixCls,
  163. onClose: onPreviewClose,
  164. mousePosition: mousePosition,
  165. src: src,
  166. alt: alt,
  167. imageInfo: {
  168. width: width,
  169. height: height
  170. },
  171. fallback: fallback,
  172. getContainer: getPreviewContainer,
  173. icons: icons,
  174. movable: movable,
  175. scaleStep: scaleStep,
  176. minScale: minScale,
  177. maxScale: maxScale,
  178. rootClassName: rootClassName,
  179. imageRender: imageRender,
  180. imgCommonProps: imgCommonProps,
  181. toolbarRender: toolbarRender
  182. }, dialogProps)));
  183. };
  184. ImageInternal.PreviewGroup = _PreviewGroup.default;
  185. if (process.env.NODE_ENV !== 'production') {
  186. ImageInternal.displayName = 'Image';
  187. }
  188. var _default = exports.default = ImageInternal;