UNPKG

@cainiaofe/cn-ui-m

Version:
82 lines (81 loc) 3.69 kB
import { __assign, __awaiter, __generator } from "tslib"; import $i18n from "../../locales/i18n"; import React, { useMemo } from 'react'; import classNames from 'classnames'; import { unpackRequest, getRequestService, withNativeProps, } from '@cainiaofe/cn-ui-common'; import { CnMessage } from "../cn-message"; import { CnButton } from "../cn-button"; import { download } from '@cainiaofe/cn-utils'; import omit from 'lodash/omit'; export var CnDownload = function (props) { var style = props.style, className = props.className, service = props.service, requestConfig = props.requestConfig, _a = props.buttonText, buttonText = _a === void 0 ? $i18n.get({ id: 'Download', dm: '下载' }) : _a, children = props.children, customRender = props.customRender; var otherProps = omit(props, [ 'style', 'className', 'service', 'requestConfig', 'buttonText', 'children', 'customRender', ]); var requestService = useMemo(function () { if (requestConfig) return getRequestService(requestConfig); return undefined; }, [requestConfig]); // 通过service拿到文件下载链接 var fetchFileUrl = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { if (requestService) return [2 /*return*/, requestService()]; if (typeof service === 'function') return [2 /*return*/, service()]; if (service) return [2 /*return*/, unpackRequest(service)]; return [2 /*return*/, undefined]; }); }); }; var onClick = function () { return __awaiter(void 0, void 0, void 0, function () { var onError, onSuccess, url, fileName, fileUrl, _a, err_1; return __generator(this, function (_b) { switch (_b.label) { case 0: onError = props.onError, onSuccess = props.onSuccess, url = props.url, fileName = props.fileName; _b.label = 1; case 1: _b.trys.push([1, 4, , 5]); _a = url; if (_a) return [3 /*break*/, 3]; return [4 /*yield*/, fetchFileUrl()]; case 2: _a = (_b.sent()); _b.label = 3; case 3: fileUrl = _a; if (!fileUrl) { throw new Error($i18n.get({ id: 'DownloadLinkDoesNotExist', dm: '下载链接不存在' })); } download(fileUrl, fileName); onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(fileUrl); return [3 /*break*/, 5]; case 4: err_1 = _b.sent(); if (onError) { onError(err_1); } else if (err_1.message) { CnMessage.error(err_1.message); } return [3 /*break*/, 5]; case 5: return [2 /*return*/]; } }); }); }; if (customRender) return customRender(onClick); if (children) { return (React.createElement("span", __assign({ style: style, className: classNames(CN_UI_HASH_CLASS_NAME, className, 'cn-ui-m-download-wrapper') }, otherProps, { onClick: onClick }), children)); } return withNativeProps(props, React.createElement(CnButton, __assign({ "data-name": "CnDownload" }, otherProps, { onClick: onClick }), buttonText)); }; CnDownload.displayName = 'CnDownload';