UNPKG

@zhangmmm/ming-ui

Version:
527 lines (438 loc) 14.8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = _interopDefault(require('react')); var ReactDOM = require('react-dom'); var classNames = _interopDefault(require('classnames')); var icons = require('@ant-design/icons'); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } var ConfigContext = React.createContext({ getPrefixCls: function getPrefixCls(suffixCls, customizePrefixCls) { if (customizePrefixCls) return customizePrefixCls; return "ming-".concat(suffixCls); } }); var ConfigConsumer = ConfigContext.Consumer; var SizeContext = React.createContext(undefined); var SizeContextProvider = function SizeContextProvider(_ref) { var children = _ref.children, size = _ref.size; return React.createElement(SizeContext.Consumer, null, function (originSize) { return React.createElement(SizeContext.Provider, { value: size || originSize }, children); }); }; var ConfigProvider = /*#__PURE__*/function (_React$Component) { _inherits(ConfigProvider, _React$Component); function ConfigProvider() { var _this; _classCallCheck(this, ConfigProvider); _this = _possibleConstructorReturn(this, _getPrototypeOf(ConfigProvider).apply(this, arguments)); _this.getPrefixCls = function (suffixCls, customizePrefixCls) { var _this$props$prefixCls = _this.props.prefixCls, prefixCls = _this$props$prefixCls === void 0 ? 'ming' : _this$props$prefixCls; if (customizePrefixCls) return customizePrefixCls; return suffixCls ? "".concat(prefixCls, "-").concat(suffixCls) : prefixCls; }; _this.renderProvider = function (context) { var _this$props = _this.props, componentSize = _this$props.componentSize, children = _this$props.children; var config = _objectSpread2({}, context, { getPrefixCls: _this.getPrefixCls }); return React.createElement(SizeContextProvider, { size: componentSize }, React.createElement(ConfigContext.Provider, { value: config }, children)); }; return _this; } _createClass(ConfigProvider, [{ key: "render", value: function render() { var _this2 = this; return React.createElement(ConfigConsumer, null, function (context) { return _this2.renderProvider(context); }); } }]); return ConfigProvider; }(React.Component); var Mode = { CONTAIN: { name: 'contain', icon: 'el-icon-full-screen' }, ORIGINAL: { name: 'original', icon: 'el-icon-c-scale-to-original' } }; var Preview = /*#__PURE__*/function (_React$Component) { _inherits(Preview, _React$Component); function Preview(props) { var _this; _classCallCheck(this, Preview); _this = _possibleConstructorReturn(this, _getPrototypeOf(Preview).call(this, props)); _this.toggleMode = function (isContain) { _this.reset(); _this.setState({ mode: isContain ? Mode.ORIGINAL : Mode.CONTAIN }); }; _this.reset = function () { _this.setState({ mode: Mode.CONTAIN, transform: { scale: 1, deg: 0 } }); }; _this.handleActions = function (type) { var _this$state$transform = _this.state.transform, scale = _this$state$transform.scale, deg = _this$state$transform.deg; var ZOOM_RARE = 0.2; var ROTATE_DEG = 90; switch (type) { case 'zoomIn': scale = parseFloat((scale + ZOOM_RARE).toFixed(3)); break; case 'zoomOut': if (scale > 0.2) scale = parseFloat((scale - ZOOM_RARE).toFixed(3)); break; case 'turnLeft': deg -= ROTATE_DEG; break; case 'turnRight': deg += ROTATE_DEG; break; } _this.setState({ transform: { scale: scale, deg: deg } }); }; _this.handleClose = function () { _this.props.changePreviewState(false); _this.reset(); }; _this.state = { mode: Mode.CONTAIN, transform: { scale: 1, deg: 0 } }; return _this; } _createClass(Preview, [{ key: "render", value: function render() { var _this2 = this; var getPrefixCls = this.context.getPrefixCls; var _this$props = this.props, src = _this$props.src, show = _this$props.show, zIndex = _this$props.zIndex; var _this$state = this.state, mode = _this$state.mode, transform = _this$state.transform; var body = document.getElementsByTagName('body')[0]; var isContain = mode === Mode.CONTAIN; var imgCls = getPrefixCls('image-preview-img'); return ReactDOM.createPortal(React.createElement("div", { className: getPrefixCls('image-preview'), style: { display: show ? 'block' : 'none', zIndex: zIndex } }, React.createElement("div", { className: getPrefixCls('image-preview-mask') }), React.createElement(icons.CloseCircleOutlined, { className: getPrefixCls('image-preview-close'), onClick: this.handleClose }), React.createElement("div", { className: getPrefixCls('image-preview-viewer') }, React.createElement("img", { src: src, className: classNames(imgCls, _defineProperty({}, "".concat(imgCls, "-").concat(mode.name), mode.name)), style: { transform: "scale(".concat(transform.scale, ") rotate(").concat(transform.deg, "deg)") }, alt: "" })), React.createElement("div", { className: getPrefixCls('image-preview-actions') }, React.createElement(icons.ZoomInOutlined, { onClick: function onClick() { return _this2.handleActions('zoomIn'); } }), React.createElement(icons.ZoomOutOutlined, { onClick: function onClick() { return _this2.handleActions('zoomOut'); } }), isContain ? React.createElement(icons.ExpandOutlined, { onClick: function onClick() { _this2.toggleMode(isContain); } }) : React.createElement(icons.CompressOutlined, { onClick: function onClick() { _this2.toggleMode(isContain); } }), React.createElement(icons.RotateLeftOutlined, { onClick: function onClick() { return _this2.handleActions('turnLeft'); } }), React.createElement(icons.RotateRightOutlined, { onClick: function onClick() { return _this2.handleActions('turnRight'); } }))), body); } }]); return Preview; }(React.Component); Preview.contextType = ConfigContext; var Img = /*#__PURE__*/function (_React$Component) { _inherits(Img, _React$Component); function Img(props) { var _this; _classCallCheck(this, Img); _this = _possibleConstructorReturn(this, _getPrototypeOf(Img).call(this, props)); _this.handleLoad = function (e, img) { _this.setState({ loading: false, imageWidth: img.width, imageHeight: img.height }); }; _this.handleError = function () { _this.setState({ isError: true, loading: false }); }; // check validity of image url before showing _this.loadImage = function () { var img = new Image(); img.onload = function (e) { return _this.handleLoad(e, img); }; img.onerror = function () { return _this.handleError(); }; img.src = _this.props.src; }; _this.changePreviewState = function (state) { // lock screen when previewing document.documentElement.style.overflow = state ? 'hidden' : 'auto'; _this.setState({ isPreview: state }); }; _this.handlePreview = function () { return _this.changePreviewState(true); }; _this.renderImage = function (_ref) { var getPrefixCls = _ref.getPrefixCls; var _this$props = _this.props, src = _this$props.src, alt = _this$props.alt, _this$props$fit = _this$props.fit, fit = _this$props$fit === void 0 ? 'fill' : _this$props$fit, _this$props$preview = _this$props.preview, preview = _this$props$preview === void 0 ? false : _this$props$preview, _this$props$zIndex = _this$props.zIndex, zIndex = _this$props$zIndex === void 0 ? 2000 : _this$props$zIndex, _this$props$placehold = _this$props.placeholder, placeholder = _this$props$placehold === void 0 ? '加载中...' : _this$props$placehold, _this$props$error = _this$props.error, error = _this$props$error === void 0 ? '加载失败' : _this$props$error, rest = _objectWithoutProperties(_this$props, ["src", "alt", "fit", "preview", "zIndex", "placeholder", "error"]); var _this$state = _this.state, loading = _this$state.loading, isError = _this$state.isError, isPreview = _this$state.isPreview; var canPreview = preview === true; var imageStyle = { objectFit: fit, cursor: canPreview ? 'pointer' : 'default' }; return React.createElement("div", Object.assign({ className: getPrefixCls('image') }, rest), loading && React.createElement("div", { className: getPrefixCls('image-placeholder') }, placeholder), isError && React.createElement("div", { className: getPrefixCls('image-error') }, error), !loading && !isError && React.createElement("img", { src: src, className: getPrefixCls('image-inner'), style: imageStyle, alt: alt, onClick: _this.handlePreview }), canPreview && React.createElement(Preview, { src: src, show: isPreview, zIndex: zIndex, changePreviewState: _this.changePreviewState })); }; _this.state = { isError: false, loading: true, imageWidth: 0, imageHeight: 0, isPreview: false }; return _this; } _createClass(Img, [{ key: "componentDidMount", value: function componentDidMount() { this.loadImage(); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { // remove document style before unmounting document.documentElement.style.overflow = ''; } }, { key: "render", value: function render() { return React.createElement(ConfigConsumer, null, this.renderImage); } }]); return Img; }(React.Component); exports.ConfigProvider = ConfigProvider; exports.Image = Img;