choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
277 lines (215 loc) • 9.24 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _mobxReactLite = require("mobx-react-lite");
var _alert = _interopRequireDefault(require("../../../lib/alert"));
var _configure = require("../../../lib/configure");
var _popover = _interopRequireDefault(require("../../../lib/popover"));
var _mobx = require("mobx");
var _radio = _interopRequireDefault(require("../radio"));
var _typography = _interopRequireDefault(require("../typography"));
var _util = _interopRequireDefault(require("../overflow-tip/util"));
var _singleton = require("../tooltip/singleton");
var _utils = require("../data-set/utils");
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _localeContext = require("../locale-context");
var _tooltip = _interopRequireDefault(require("../tooltip"));
var _button = _interopRequireDefault(require("../button"));
var _enum = require("../button/enum");
var _enum2 = require("../core/enum");
var _message = _interopRequireDefault(require("../message"));
var Text = _typography["default"].Text;
var ClipboardBar = function ClipboardBar(props) {
var clipboard = props.clipboard;
var _useContext = (0, _react.useContext)(_TableContext["default"]),
tableStore = _useContext.tableStore,
prefixCls = _useContext.prefixCls,
dataSet = _useContext.dataSet;
var refText = (0, _react.useRef)(null);
var handleDownloadtemplate = (0, _react.useCallback)(function () {
var getXlsxConfig = (0, _configure.getConfig)('xlsx');
if (getXlsxConfig.name !== 'xlsx') {
_message["default"].warning((0, _localeContext.$l)('Table', 'no_xlsx'));
return;
}
var leafs = tableStore.columnGroups.leafs;
var templateHeader = {}; // 表头
var templateType = {}; // 字段类型
var templateIsMutiple = {}; // 是否多值
for (var i = 0; i < leafs.length; i++) {
var item = leafs[i];
var columnName = item && item.column.name;
if (columnName) {
var field = dataSet.fields.get(columnName);
if (field) {
var label = field.get('label');
var type = field.get('type');
var isMutiple = field.get('multiple');
templateHeader[columnName] = label;
templateType[columnName] = type;
templateIsMutiple[columnName] = isMutiple;
}
}
}
var data = []; // 模拟 5 条数据
var _loop = function _loop(_i) {
var row = {};
Object.keys(templateHeader).forEach(function (key) {
switch (templateType[key]) {
case "string":
case "intl":
row[key] = templateIsMutiple[key] ? '文字1,文字2' : '文字';
break;
case "number":
row[key] = templateIsMutiple[key] ? "10, 20" : Math.floor(Math.random() * 100 + 1);
break;
case "boolean":
row[key] = Math.random() > 0.5 ? "是" : "否";
break;
case "object":
row[key] = templateIsMutiple[key] ? "LOV相关文字1,LOV相关文字2" : "LOV相关文字";
break;
case "date":
row[key] = templateIsMutiple[key] ? "2023-07-01,2023-07-02" : "2023-07-01";
break;
case "dateTime":
row[key] = templateIsMutiple[key] ? "2023-07-01 12:12:12,2023-07-02 13:13:13" : "2023-07-01 12:12:12";
break;
case "year":
row[key] = templateIsMutiple[key] ? '2023,2024' : '2023';
break;
case "week":
row[key] = templateIsMutiple[key] ? '2023-20周,2023-21周' : '2023-20周';
break;
case "month":
row[key] = templateIsMutiple[key] ? '2023-01,2024-01' : '2023-01';
break;
case "time":
row[key] = templateIsMutiple[key] ? '05:05:00,16:14:15' : '16:14:15';
break;
case "email":
row[key] = templateIsMutiple[key] ? 'xxxxxx@xxx.com,zzzzz@zzz.com' : 'xxxxxx@xxx.com';
break;
case "url":
row[key] = templateIsMutiple[key] ? 'https:www.xxxxxx.com/,https:www.zzzzzz.com/' : 'https:www.xxxxxx.com/';
break;
case "bigNumber":
row[key] = templateIsMutiple[key] ? '123456789.123456789,1000000.000000001' : '123456789.123456789';
break;
default:
break;
}
});
data.push(row);
};
for (var _i = 0; _i < 5; _i++) {
_loop(_i);
}
data.unshift(templateHeader);
(0, _utils.exportExcel)(data, (0, _localeContext.$l)('Table', 'paste_template'), getXlsxConfig);
}, [dataSet]);
var clipboardDescription = (0, _react.useMemo)(function () {
if (clipboard.description) {
return clipboard.description;
}
var isMac = navigator.platform.toLowerCase().includes('mac');
var info = [/*#__PURE__*/_react["default"].createElement("span", {
key: "info-header"
}, (0, _localeContext.$l)('Table', 'table_support'))];
if (clipboard.copy) {
info.push( /*#__PURE__*/_react["default"].createElement("span", {
key: "info-copy"
}, " ", /*#__PURE__*/_react["default"].createElement(Text, {
keyboard: true
}, isMac ? 'command' : 'CTRL', "+C"), " ", (0, _localeContext.$l)('Table', 'ctrl_c_info')));
}
if (clipboard.paste) {
info.push( /*#__PURE__*/_react["default"].createElement("span", {
key: "info-paste"
}, " ", /*#__PURE__*/_react["default"].createElement(Text, {
keyboard: true
}, isMac ? 'command' : 'CTRL', "+V"), " ", (0, _localeContext.$l)('Table', 'ctrl_v_info')));
}
return info;
}, [clipboard]);
var handleChange = (0, _react.useCallback)((0, _mobx.action)(function (value) {
tableStore.isCopyPristine = value === 'pristine'; // 切换之后,Table 聚焦
tableStore.node.focus();
}), []);
var suffixInfo = (0, _react.useMemo)(function () {
var btn = [];
if (clipboard.copy) {
btn.push( /*#__PURE__*/_react["default"].createElement(_popover["default"], {
key: "clipboard-copy",
trigger: "hover",
content: /*#__PURE__*/_react["default"].createElement("form", null, /*#__PURE__*/_react["default"].createElement(_radio["default"], {
name: "base",
value: "display",
defaultChecked: true,
onChange: handleChange
}, (0, _localeContext.$l)('Table', 'copy_display')), /*#__PURE__*/_react["default"].createElement(_radio["default"], {
name: "base",
value: "pristine",
onChange: handleChange
}, (0, _localeContext.$l)('Table', 'copy_pristine')))
}, /*#__PURE__*/_react["default"].createElement("a", null, (0, _localeContext.$l)('Table', 'copy_config'))));
}
if (clipboard.paste) {
btn.push([/*#__PURE__*/_react["default"].createElement("a", {
key: "clipboard-paste",
onClick: handleDownloadtemplate,
style: {
marginLeft: clipboard.copy ? '0.16rem' : 0
}
}, (0, _localeContext.$l)('Table', 'download_table_template')), /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'download_table_template_tooltip'),
theme: "light",
key: "download_table_template"
}, /*#__PURE__*/_react["default"].createElement(_button["default"], {
funcType: _enum.FuncType.flat,
color: _enum.ButtonColor.primary,
size: _enum2.Size.small,
icon: 'help_outline'
}))]);
}
return btn;
}, [clipboard]);
var handleMouseEnter = (0, _react.useCallback)(function () {
if (refText.current && (0, _util["default"])(refText.current)) {
(0, _singleton.show)(refText.current, {
title: clipboardDescription,
theme: 'dark'
});
}
}, [clipboard, refText]);
var handleMouseLeave = (0, _react.useCallback)(function () {
if (refText.current) {
(0, _singleton.hide)();
}
}, [refText]);
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-clipboard")
}, /*#__PURE__*/_react["default"].createElement(_alert["default"], {
message: /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-clipboard-content")
}, /*#__PURE__*/_react["default"].createElement("div", {
ref: refText,
className: "".concat(prefixCls, "-clipboard-content-text"),
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave
}, clipboardDescription), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-clipboard-content-suffix")
}, suffixInfo)),
type: "info",
showIcon: true
}));
};
ClipboardBar.displayName = 'ClipboardBar';
var _default = (0, _mobxReactLite.observer)(ClipboardBar);
exports["default"] = _default;
//# sourceMappingURL=ClipboardBar.js.map