UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

85 lines 2.6 kB
import { concat, get } from 'lodash'; import { CopyMIMEType, } from '../../common/interface/export'; /** * 同步复制 */ export const copyToClipboardByExecCommand = (data) => new Promise((resolve, reject) => { let content; if (Array.isArray(data)) { content = get(data.filter((item) => item.type === CopyMIMEType.PLAIN), '[0].content', ''); } else { content = data.content || ''; } const textarea = document.createElement('textarea'); textarea.value = content; document.body.appendChild(textarea); // 开启 preventScroll, 防止页面有滚动条时触发滚动 textarea.focus({ preventScroll: true }); textarea.select(); const success = document.execCommand('copy'); document.body.removeChild(textarea); if (success) { resolve(); } else { reject(); } }); /** * 异步复制 */ export const copyToClipboardByClipboard = (data) => navigator.clipboard .write([ new ClipboardItem(concat(data).reduce((prev, copyable) => { const { type, content } = copyable; // eslint-disable-next-line no-control-regex const contentToCopy = content.replace(/\x00/g, ''); return Object.assign(Object.assign({}, prev), { [type]: new Blob([contentToCopy], { type }) }); }, {})), ]) .catch(() => copyToClipboardByExecCommand(data)); /** * @name 复制数据 * @param data 数据源 * @param async 异步复制 */ export const copyToClipboard = (data, async = true) => { let copyableItem; if (typeof data === 'string') { copyableItem = { content: data, type: CopyMIMEType.PLAIN, }; } else { copyableItem = data; } if (!navigator.clipboard || !window.ClipboardItem || !async) { return copyToClipboardByExecCommand(copyableItem); } return copyToClipboardByClipboard(copyableItem); }; /** * @name 导出数据 * @param dataString 数据源 (字符串) * @param fileName 文件名 (格式为 csv) */ export const download = (dataString, fileName) => { try { const link = document.createElement('a'); link.download = `${fileName}.csv`; // Avoid errors in Chinese encoding. const dataBlob = new Blob([`\ufeff${dataString}`], { type: 'text/csv;charset=utf-8', }); link.href = URL.createObjectURL(dataBlob); link.click(); URL.revokeObjectURL(link.href); } catch (error) { // eslint-disable-next-line no-console console.error(error); } }; //# sourceMappingURL=utils.js.map