UNPKG

@txdfe/at

Version:

一个设计体系组件库

316 lines (258 loc) 11.8 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactDom = _interopRequireDefault(require("react-dom")); var _util = require("../../util"); var _util2 = require("../util"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 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); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 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 } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 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; } var INPUT_STYLE = { position: 'absolute', top: 0, right: 0, fontSize: 9999, zIndex: 9999, opacity: 0, outline: 'none', cursor: 'pointer' }; var IframeUploader = /*#__PURE__*/function (_React$Component) { _inherits(IframeUploader, _React$Component); var _super = _createSuper(IframeUploader); function IframeUploader(_props) { var _this; _classCallCheck(this, IframeUploader); _this = _super.call(this, _props); _defineProperty(_assertThisInitialized(_this), "state", { uploading: false }); _defineProperty(_assertThisInitialized(_this), "file", {}); _defineProperty(_assertThisInitialized(_this), "onLoad", function () { if (!_this.state.uploading) { return; } var _assertThisInitialize = _assertThisInitialized(_this), props = _assertThisInitialize.props, file = _assertThisInitialize.file; var response; try { var doc = _this.refs.iframe.contentDocument; var script = doc.getElementsByTagName('script')[0]; if (script && script.parentNode === doc.body) { doc.body.removeChild(script); } response = doc.body.innerHTML; props.onSuccess(response, file); } catch (err) { _util.log.warning('cross domain error for Upload. Maybe server should return document.domain script.'); response = 'cross-domain'; props.onError(err, null, file); } _this.endUpload(); }); _defineProperty(_assertThisInitialized(_this), "onSelect", function (e) { _this.file = { uid: (0, _util2.uid)(), name: e.target.value }; _this.props.onSelect([_this.file]); }); _this.domain = typeof document !== 'undefined' && document.domain ? document.domain : ''; return _this; } _createClass(IframeUploader, [{ key: "componentDidMount", value: function componentDidMount() { this.updateInputWH(); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { this.updateInputWH(); } }, { key: "startUpload", value: function startUpload() { this.upload(this.file); this.file = {}; } }, { key: "upload", value: function upload(file) { var _this2 = this; if (!this.state.uploading) { // eslint-disable-next-line this.state.uploading = true; this.setState({ uploading: true }); } var beforeUpload = this.props.beforeUpload; if (!beforeUpload) { return this.post(file); } var before = beforeUpload(file); if (before && before.then) { before.then(function () { _this2.post(file); }, function () { _this2.endUpload(); }); } else if (before !== false) { this.post(file); } else { this.endUpload(); } } }, { key: "endUpload", value: function endUpload() { this.file = {}; if (this.state.uploading) { // eslint-disable-next-line this.state.uploading = false; this.setState({ uploading: false }); } } }, { key: "updateInputWH", value: function updateInputWH() { var rootNode = _reactDom["default"].findDOMNode(this); var inputNode = this.refs.input; inputNode.style.height = "".concat(rootNode.offsetHeight, "px"); inputNode.style.width = "".concat(rootNode.offsetWidth, "px"); } }, { key: "abort", value: function abort(file) { if (file) { var _uid = file; if (file && file.uid) { _uid = file.uid; } if (_uid === this.file.uid) { this.endUpload(); } } else { this.endUpload(); } } }, { key: "post", value: function post(file) { var formNode = this.refs.form; var dataSpan = this.refs.data; var data = this.props.data; if (typeof data === 'function') { data = data(file); } var inputs = document.createDocumentFragment(); for (var key in data) { if (data.hasOwnProperty(key)) { var input = document.createElement('input'); input.setAttribute('name', key); input.value = data[key]; inputs.appendChild(input); } } dataSpan.appendChild(inputs); formNode.submit(); dataSpan.innerHTML = ''; this.props.onStart(file); } }, { key: "render", value: function render() { var _this$props = this.props, disabled = _this$props.disabled, className = _this$props.className, children = _this$props.children, accept = _this$props.accept, name = _this$props.name, style = _this$props.style; var iframeName = "".concat(name, "-iframe"); return /*#__PURE__*/_react["default"].createElement("span", { className: className, style: _objectSpread({ position: 'relative', zIndex: 0, display: 'inline-block' }, style) }, !disabled ? /*#__PURE__*/_react["default"].createElement("iframe", { ref: "iframe", name: iframeName, onLoad: this.onLoad, style: { display: 'none' } }) : null, /*#__PURE__*/_react["default"].createElement("form", { ref: "form", method: "post", action: this.props.action, encType: "multipart/form-data", target: iframeName }, /*#__PURE__*/_react["default"].createElement("input", { ref: "input", type: "file", accept: accept, name: name, onChange: this.onSelect, style: INPUT_STYLE }), /*#__PURE__*/_react["default"].createElement("input", { name: "_documentDomain", value: this.domain, type: "hidden" }), /*#__PURE__*/_react["default"].createElement("span", { ref: "data" })), children); } }]); return IframeUploader; }(_react["default"].Component); _defineProperty(IframeUploader, "propTypes", { style: _propTypes["default"].object, action: _propTypes["default"].string.isRequired, name: _propTypes["default"].string.isRequired, data: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].func]), disabled: _propTypes["default"].bool, className: _propTypes["default"].string, children: _propTypes["default"].node, headers: _propTypes["default"].object, autoUpload: _propTypes["default"].bool, onSelect: _propTypes["default"].func, beforeUpload: _propTypes["default"].func, onStart: _propTypes["default"].func, onSuccess: _propTypes["default"].func, onError: _propTypes["default"].func, accept: _propTypes["default"].string }); _defineProperty(IframeUploader, "defaultProps", { name: 'file', onSelect: _util.func.noop, beforeUpload: _util.func.noop, onStart: _util.func.noop, onSuccess: _util.func.noop, onError: _util.func.noop, onAbort: _util.func.noop }); var _default = IframeUploader; exports["default"] = _default;