UNPKG

@ant-design/x

Version:

Craft AI-driven interfaces effortlessly

115 lines (112 loc) 4.08 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _icons = require("@ant-design/icons"); var _antd = require("antd"); var _clsx = _interopRequireDefault(require("clsx")); var _react = _interopRequireWildcard(require("react")); var _xProvider = require("../x-provider"); // File tree node type const { DirectoryTree: AntDirectoryTree } = _antd.Tree; const DirectoryTree = ({ treeData, selectedKeys, expandedKeys, onSelect, onExpand, showLine = false, defaultExpandAll = true, className, classNames, directoryIcons, styles, style, directoryTitle, prefixCls: customizePrefixCls }) => { // ============================ Tree Config ============================ const isFolder = node => { return !!node.children && node.children.length > 0; }; const getIcon = (0, _react.useCallback)(node => { // If directoryIcons is false or null, do not display icons if (directoryIcons === false || directoryIcons === null) { return null; } if (isFolder(node)) { const icon = directoryIcons?.directory; if (typeof icon === 'function') { return icon(); } return icon || /*#__PURE__*/_react.default.createElement(_icons.FolderOutlined, null); } // Return corresponding icon based on file extension const filePath = node.path.toLowerCase(); const extension = filePath.split('.').pop(); if (extension) { // Check if custom icon configuration exists const icon = directoryIcons?.[extension]; if (icon) { return typeof icon === 'function' ? icon() : icon; } } return /*#__PURE__*/_react.default.createElement(_icons.FileOutlined, null); }, [directoryIcons]); const buildPathSegments = (0, _react.useCallback)((node, parentSegments = []) => { if (node.path === '/' && parentSegments.length === 0) { return ['/']; } return [...parentSegments, node.path].filter(segment => segment !== ''); }, []); const convertToTreeData = (0, _react.useCallback)((nodes, parentSegments = []) => { return nodes.map(node => { const pathSegments = buildPathSegments(node, parentSegments); const fullPath = pathSegments.join('/').replace(/^\/+/, ''); return { ...node, key: fullPath, path: fullPath, pathSegments, title: node.title, icon: getIcon(node), isLeaf: !isFolder(node), children: node.children ? convertToTreeData(node.children, pathSegments) : undefined }; }); }, [buildPathSegments, getIcon]); const treeDataConverted = convertToTreeData(treeData); const titleNode = directoryTitle === false || directoryTitle === null ? null : typeof directoryTitle === 'function' ? directoryTitle() : directoryTitle; // ============================ Prefix ============================ const { getPrefixCls } = (0, _xProvider.useXProviderContext)(); const prefixCls = getPrefixCls('folder', customizePrefixCls); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, titleNode ? /*#__PURE__*/_react.default.createElement("div", { style: { ...styles?.directoryTitle, ...style }, className: (0, _clsx.default)(`${prefixCls}-directory-tree-title`, className, classNames?.directoryTitle) }, titleNode) : null, /*#__PURE__*/_react.default.createElement(AntDirectoryTree, { treeData: treeDataConverted, selectedKeys: selectedKeys, expandedKeys: expandedKeys, onSelect: onSelect, onExpand: onExpand, multiple: false, blockNode: true, classNames: { itemTitle: `${prefixCls}-directory-tree-item-title` }, showLine: showLine, defaultExpandAll: defaultExpandAll, className: (0, _clsx.default)(`${prefixCls}-directory-tree-content`) })); }; var _default = exports.default = DirectoryTree;