UNPKG

ze-react-component-library

Version:
71 lines (65 loc) 2.37 kB
import "antd/es/message/style"; import _message from "antd/es/message"; import React from "react"; import { CopyOutlined, EditOutlined } from "@ant-design/icons"; import { copyToClipboard } from "@antv/s2"; import { Light as SyntaxHighlighter } from "react-syntax-highlighter"; import sqlPrettier from "sql-prettier"; import js from "react-syntax-highlighter/dist/esm/languages/hljs/javascript"; import sql from "react-syntax-highlighter/dist/esm/languages/hljs/sql"; import json from "react-syntax-highlighter/dist/esm/languages/hljs/json"; import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs"; import "./index.less"; SyntaxHighlighter.registerLanguage("javascript", js); SyntaxHighlighter.registerLanguage("sql", sql); SyntaxHighlighter.registerLanguage("json", json); function formatSql(sql) { var fSql = sql; try { fSql = sqlPrettier.format(sql); return fSql; } catch (error) { console.log(error); return fSql; } } var CodeViewer = function CodeViewer(_a) { var code = _a.code, language = _a.language, editable = _a.editable, onEditIconClick = _a.onEditIconClick; var codeArr = (code instanceof Array ? code : [code]).filter(function (f) { return f; }); var line = new Array(40).fill("-").join("-"); var dividerMap = { javascript: "\n\n//" + line + "\n\n", sql: "\n\n#" + line + "\n\n", default: "\n\n" }; var fCode = codeArr.map(function (d) { if (language === "sql") { return formatSql(d.endsWith(";") ? d : d + ";"); } return d; }).join(dividerMap[language] || dividerMap.default); return /*#__PURE__*/React.createElement("div", { className: "ze-code-viewer" }, /*#__PURE__*/React.createElement(SyntaxHighlighter, { language: language, style: docco }, fCode), editable && /*#__PURE__*/React.createElement("span", { className: "ze-code-viewer-edit" }, /*#__PURE__*/React.createElement(EditOutlined, { onClick: function onClick() { onEditIconClick === null || onEditIconClick === void 0 ? void 0 : onEditIconClick(); } })), /*#__PURE__*/React.createElement("span", { className: "ze-code-viewer-copy", onClick: function onClick() { copyToClipboard(fCode); _message.success("复制成功"); } }, /*#__PURE__*/React.createElement(CopyOutlined, null))); }; export default CodeViewer;