UNPKG

shineout

Version:

Shein 前端组件库

203 lines (162 loc) 6.24 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.Handler = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _immer = _interopRequireDefault(require("immer")); var _classnames = _interopRequireDefault(require("classnames")); var _styles = require("./styles"); var _Upload = _interopRequireDefault(require("./Upload")); var _request = require("./request"); var _locale = require("../locale"); var Handler = function Handler(_ref) { var className = _ref.className, disabled = _ref.disabled, urlInvalid = _ref.urlInvalid, children = _ref.children, style = _ref.style, width = _ref.width, height = _ref.height, onKeyDown = _ref.onKeyDown, onMouseDown = _ref.onMouseDown, otherProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["className", "disabled", "urlInvalid", "children", "style", "width", "height", "onKeyDown", "onMouseDown"]); var mc = (0, _classnames.default)((0, _styles.uploadClass)('image-plus', 'image-item', disabled && 'disabled', urlInvalid && 'url-invalid-border'), className); var ms = Object.assign({}, { width: width, height: height }, style); return _react.default.createElement("div", (0, _extends2.default)({}, otherProps, { onKeyDown: onKeyDown, onMouseDown: onMouseDown, style: ms, tabIndex: disabled ? -1 : 0, className: mc }), children || _react.default.createElement("div", { className: (0, _styles.uploadClass)('indicator', urlInvalid && 'url-invalid-indicator') })); }; exports.Handler = Handler; Handler.defaultProps = { width: 80, height: 80 }; var ImageUploadDefaultProps = { accept: 'image/*', height: 80, validator: {}, width: 80 }; var Image = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Image, _PureComponent); function Image(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "timeout", void 0); _this.beforeUpload = _this.beforeUpload.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleMouseDown = _this.handleMouseDown.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleKeyDown = _this.handleKeyDown.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.state = { urlInvalid: false }; _this.timeout = null; return _this; } var _proto = Image.prototype; _proto.beforeUpload = function beforeUpload(blob, validatorHandle) { var _this2 = this; return new Promise(function (resolve, reject) { var _ref2 = _this2.props.validator || {}, imageSize = _ref2.imageSize; var file = {}; var reader = new FileReader(); reader.onload = function (e) { var data = e.target.result; file.data = data; var image = new window.Image(); image.onerror = function () { _this2.setState((0, _immer.default)(function (draft) { draft.urlInvalid = true; })); reject(); }; image.onload = function () { if (!imageSize) { resolve(file); return; } var res = imageSize(image); if (res instanceof Error) { if (!validatorHandle(res, blob)) reject(); file.status = _request.ERROR; file.message = res.message; } resolve(file); }; image.src = data; }; reader.readAsDataURL(blob); }); }; _proto.handleKeyDown = function handleKeyDown(e) { this.setState({ urlInvalid: false }); if (e.keyCode === 13) e.target.click(); }; _proto.handleMouseDown = function handleMouseDown() { this.setState({ urlInvalid: false }); }; _proto.render = function render() { var _this3 = this; var _this$props = this.props, children = _this$props.children, width = _this$props.width, height = _this$props.height, ignorePreview = _this$props.ignorePreview, others = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["children", "width", "height", "ignorePreview"]); var urlInvalid = this.state.urlInvalid; if (urlInvalid) { clearTimeout(this.timeout); this.timeout = setTimeout(function () { _this3.setState({ urlInvalid: false }); }, 3000); } var style = { width: width, height: height }; return _react.default.createElement(_Upload.default, (0, _extends2.default)({}, others, { imageStyle: style, beforeUpload: ignorePreview ? undefined : this.beforeUpload }), _react.default.createElement(Handler, { disabled: this.props.disabled, style: style, onKeyDown: this.handleKeyDown, onMouseDown: this.handleMouseDown, urlInvalid: urlInvalid }, children), urlInvalid && _react.default.createElement("div", { style: { width: '100%', position: 'relative' } }, _react.default.createElement("div", { className: (0, _styles.uploadClass)('url-invalid-message') }, (0, _locale.getLocale)('urlInvalidMsg')))); }; return Image; }(_react.PureComponent); (0, _defineProperty2.default)(Image, "defaultProps", ImageUploadDefaultProps); var _default = Image; exports.default = _default;