UNPKG

@aliretail/react-materials-components

Version:
253 lines (207 loc) 8.57 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = exports.Upload = void 0; var _button = _interopRequireDefault(require("@alifd/next/lib/button")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _upload = _interopRequireDefault(require("@alifd/next/lib/upload")); var React = _interopRequireWildcard(require("react")); var _next = require("@formily/next"); var _shared = require("@formily/shared"); var _shared2 = require("../shared"); var _Preview = _interopRequireDefault(require("./Preview")); var _excluded = ["listType", "locale", "children"]; var _class, _temp; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var UploadCard = _upload["default"].Card, UploadDragger = _upload["default"].Dragger; var exts = [{ ext: /\.docx?/i, icon: '//img.alicdn.com/tfs/TB1n8jfr1uSBuNjy1XcXXcYjFXa-200-200.png' }, { ext: /\.pptx?/i, icon: '//img.alicdn.com/tfs/TB1ItgWr_tYBeNjy1XdXXXXyVXa-200-200.png' }, { ext: /\.jpe?g/i, icon: '//img.alicdn.com/tfs/TB1wrT5r9BYBeNjy0FeXXbnmFXa-200-200.png' }, { ext: /pdf/i, icon: '//img.alicdn.com/tfs/TB1GwD8r9BYBeNjy0FeXXbnmFXa-200-200.png' }, { ext: /\.png/i, icon: '//img.alicdn.com/tfs/TB1BHT5r9BYBeNjy0FeXXbnmFXa-200-200.png' }, { ext: /\.eps/i, icon: '//img.alicdn.com/tfs/TB1G_iGrVOWBuNjy0FiXXXFxVXa-200-200.png' }, { ext: /\.ai/i, icon: '//img.alicdn.com/tfs/TB1B2cVr_tYBeNjy1XdXXXXyVXa-200-200.png' }, { ext: /\.gif/i, icon: '//img.alicdn.com/tfs/TB1DTiGrVOWBuNjy0FiXXXFxVXa-200-200.png' }, { ext: /\.svg/i, icon: '//img.alicdn.com/tfs/TB1uUm9rY9YBuNjy0FgXXcxcXXa-200-200.png' }, { ext: /\.xlsx?/i, icon: '//img.alicdn.com/tfs/TB1any1r1OSBuNjy0FdXXbDnVXa-200-200.png' }, { ext: /\.psd?/i, icon: '//img.alicdn.com/tfs/TB1_nu1r1OSBuNjy0FdXXbDnVXa-200-200.png' }, { ext: /\.(wav|aif|aiff|au|mp1|mp2|mp3|ra|rm|ram|mid|rmi)/i, icon: '//img.alicdn.com/tfs/TB1jPvwr49YBuNjy0FfXXXIsVXa-200-200.png' }, { ext: /\.(avi|wmv|mpg|mpeg|vob|dat|3gp|mp4|mkv|rm|rmvb|mov|flv)/i, icon: '//img.alicdn.com/tfs/TB1FrT5r9BYBeNjy0FeXXbnmFXa-200-200.png' }, { ext: /\.(zip|rar|arj|z|gz|iso|jar|ace|tar|uue|dmg|pkg|lzh|cab)/i, icon: '//img.alicdn.com/tfs/TB10jmfr29TBuNjy0FcXXbeiFXa-200-200.png' }, { ext: /\..+/i, icon: '//img.alicdn.com/tfs/TB10.R4r3mTBuNjy1XbXXaMrVXa-200-200.png' }]; var testOpts = function testOpts(ext, options) { if (options && (0, _shared.isArr)(options.include)) { return options.include.some(function (url) { return ext.test(url); }); } if (options && (0, _shared.isArr)(options.exclude)) { return !options.exclude.some(function (url) { return ext.test(url); }); } return true; }; var getImageByUrl = function getImageByUrl(url, options) { for (var i = 0; i < exts.length; i++) { if (exts[i].ext.test(url) && testOpts(exts[i].ext, options)) { return exts[i].icon; } } return url; }; var normalizeFileList = function normalizeFileList(fileList) { if (fileList && fileList.length) { return fileList.map(function (file) { return (0, _extends2["default"])({ name: file.name, downloadURL: file.downloadURL || file.imgURL }, file.response, { imgURL: getImageByUrl(file.imgURL, { exclude: ['.png', '.jpg', '.jpeg', '.gif'] }) }); }); } return []; }; // eslint-disable-next-line no-nested-ternary var shallowClone = function shallowClone(val) { return (0, _shared.isArr)(val) ? [].concat(val) : typeof val === 'object' ? (0, _extends2["default"])({}, val) : val; }; var mapProps = function mapProps(props, fieldProps) { (0, _shared2.mapStyledProps)(props, fieldProps); if (props.readOnly || 'editable' in props && !props.editable) { props.isPreview = true; } // fusion的Upload组件需要value是一个对象 if (props.isPreview && typeof props.value === 'string') { props.value = { url: props.value }; } if (props.isImage) { props.renderPreview = function () { return /*#__PURE__*/React.createElement(_Preview["default"], { value: props.value }); }; } }; var Upload = (0, _next.connect)({ getProps: mapProps })((_temp = _class = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2["default"])(Uploader, _React$Component); function Uploader() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.state = { value: (0, _shared.toArr)(_this.props.value) }; _this.onChangeHandler = function (fileList) { var onChange = _this.props.onChange; fileList = (0, _shared.toArr)(fileList); if (fileList.every(function (file) { return file.state === 'done' || file.imgURL || file.downloadURL; })) { fileList = normalizeFileList(fileList); _this.setState({ value: fileList }, function () { onChange(fileList.length > 0 ? fileList : undefined); }); } else { _this.setState({ value: fileList }); } }; return _this; } var _proto = Uploader.prototype; _proto.componentDidUpdate = function componentDidUpdate(preProps) { if (this.props.value && !(0, _shared.isEqual)(this.props.value, preProps.value)) { this.setState({ value: this.props.value }); } }; _proto.render = function render() { var _this$props = this.props, listType = _this$props.listType, locale = _this$props.locale, children = _this$props.children, others = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded); if (listType.indexOf('card') > -1) { return /*#__PURE__*/React.createElement(UploadCard, (0, _extends2["default"])({}, others, { value: shallowClone(this.state.value), onChange: this.onChangeHandler, listType: "card" })); } if (listType.indexOf('dragger') > -1) { return ( /*#__PURE__*/ // @ts-ignore 感觉是 next 那边对于 Dragger 的 props 定义错了 React.createElement(UploadDragger, (0, _extends2["default"])({}, others, { value: shallowClone(this.state.value), onChange: this.onChangeHandler, listType: listType.indexOf('image') > -1 ? 'image' : 'text' })) ); } return /*#__PURE__*/React.createElement(_upload["default"], (0, _extends2["default"])({}, others, { value: shallowClone(this.state.value), onChange: this.onChangeHandler, listType: listType }), children || /*#__PURE__*/React.createElement(_button["default"], { style: { margin: '0 0 10px' } }, locale && locale.uploadText || '上传文件')); }; return Uploader; }(React.Component), _class.defaultProps = { action: 'https://www.easy-mock.com/mock/5b713974309d0d7d107a74a3/alifd/upload', listType: 'text', multiple: true }, _temp)); exports.Upload = Upload; var _default = Upload; exports["default"] = _default;