UNPKG

@ant-design/x

Version:

Craft AI-driven interfaces effortlessly

166 lines (161 loc) 6.12 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _antd = require("antd"); var _clsx = require("clsx"); var _react = _interopRequireDefault(require("react")); var _reactSyntaxHighlighter = require("react-syntax-highlighter"); var _prism = require("react-syntax-highlighter/dist/esm/styles/prism"); var _useXComponentConfig = _interopRequireDefault(require("../_util/hooks/use-x-component-config")); var _ActionsCopy = _interopRequireDefault(require("../actions/ActionsCopy")); var _locale = require("../locale"); var _en_US = _interopRequireDefault(require("../locale/en_US")); var _xProvider = require("../x-provider"); var _style = _interopRequireDefault(require("./style")); const customOneLight = { ..._prism.oneLight, 'pre[class*="language-"]': { ..._prism.oneLight['pre[class*="language-"]'], margin: 0, background: 'transparent', padding: 0, borderRadius: 0 } }; const FileView = props => { const { prefixCls: customizePrefixCls, classNames, styles, style, selectedFile, fileContent = '', loading = false, previewTitle, getFileNode, emptyRender, previewRender } = props; const [contextLocale] = (0, _locale.useLocale)('Folder', _en_US.default.Folder); // ============================ Prefix ============================ const { getPrefixCls } = (0, _xProvider.useXProviderContext)(); const prefixCls = getPrefixCls('folder', customizePrefixCls); const contextConfig = (0, _useXComponentConfig.default)('folder'); const previewCls = `${prefixCls}-preview`; const [hashId, cssVarCls] = (0, _style.default)(prefixCls); // ============================ Helpers ============================ const getFileExtension = (path = '') => { const parts = path.split('.'); return parts[parts.length - 1] || ''; }; const getLanguageFromExtension = ext => { return ext.toLowerCase() || 'txt'; }; // ============================ Render ============================ const renderContent = () => { if (loading) { return /*#__PURE__*/_react.default.createElement("div", { className: (0, _clsx.clsx)(`${previewCls}-loading-container`, classNames?.previewRender) }, /*#__PURE__*/_react.default.createElement(_antd.Spin, null)); } if (!selectedFile || selectedFile.length === 0) { // If emptyRender is false or null, do not display empty state if (emptyRender === false || emptyRender === null) { return null; } const emptyNode = typeof emptyRender === 'function' ? emptyRender() : emptyRender || /*#__PURE__*/_react.default.createElement(_antd.Empty, { image: _antd.Empty.PRESENTED_IMAGE_SIMPLE, description: contextLocale.selectFile }); return /*#__PURE__*/_react.default.createElement("div", { className: (0, _clsx.clsx)(`${previewCls}-empty-container`, classNames?.previewRender) }, emptyNode); } const fileNode = getFileNode?.(selectedFile); const title = fileNode?.title || selectedFile[selectedFile.length - 1]; const path = selectedFile; // Get file extension from filename const fileName = selectedFile[selectedFile.length - 1]; const extension = getFileExtension(fileName); const language = getLanguageFromExtension(extension); // Handle custom content title let headerNode; if (previewTitle === false || previewTitle === null) { // If previewTitle is false or null, do not display title headerNode = null; } else if (previewTitle) { headerNode = typeof previewTitle === 'function' ? previewTitle({ title, path, content: fileContent }) : previewTitle; } else { headerNode = /*#__PURE__*/_react.default.createElement(_antd.Flex, { justify: "space-between", align: "center", className: `${previewCls}-title` }, /*#__PURE__*/_react.default.createElement("span", { className: `${previewCls}-filename` }, title), /*#__PURE__*/_react.default.createElement(_ActionsCopy.default, { text: fileContent, className: `${previewCls}-copy` })); } // Handle custom preview content let contentNode; const originContentNode = /*#__PURE__*/_react.default.createElement(_reactSyntaxHighlighter.PrismLight, { language: language, wrapLines: true, style: customOneLight, codeTagProps: { style: { background: 'transparent' } } }, fileContent.replace(/\n$/, '')); if (previewRender) { if (typeof previewRender === 'function') { contentNode = previewRender({ content: fileContent, path: selectedFile, title: fileNode?.title, language }, { originNode: originContentNode }); } else { contentNode = previewRender; } } else { contentNode = /*#__PURE__*/_react.default.createElement(_reactSyntaxHighlighter.PrismLight, { language: language, wrapLines: true, style: customOneLight, codeTagProps: { style: { background: 'transparent' } } }, fileContent.replace(/\n$/, '')); } return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, headerNode && /*#__PURE__*/_react.default.createElement("div", { className: (0, _clsx.clsx)(`${previewCls}-title-wrapper`, classNames?.previewTitle) }, headerNode), /*#__PURE__*/_react.default.createElement("div", { className: (0, _clsx.clsx)(`${previewCls}-content`, classNames?.previewRender) }, contentNode)); }; return /*#__PURE__*/_react.default.createElement("div", { className: (0, _clsx.clsx)(`${prefixCls}-preview`, classNames?.filePreview, hashId, cssVarCls), style: { ...contextConfig.styles?.filePreview, ...styles?.filePreview, ...style } }, renderContent()); }; var _default = exports.default = FileView;