ze-react-component-library
Version:
ZeroETP React Component Library
71 lines (65 loc) • 2.37 kB
JavaScript
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;