kwikid-components-react
Version:
KwikID's Component Library in React
89 lines (85 loc) • 3.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Tree = void 0;
var _react = _interopRequireWildcard(require("react"));
var _md = require("react-icons/md");
var _DataTree = _interopRequireDefault(require("./DataTree.defaults"));
var _DataTree2 = require("./DataTree.helper");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const TREE_NODE_PADDING = 20;
const TreeNodeComponent = _ref => {
var _node$children;
let {
node,
level,
onFileClick
} = _ref;
const [expanded, setExpanded] = (0, _react.useState)(false);
const hasChildren = node.children && node.children.length > 0;
const handleClick = () => {
if (node.type === "folder") {
setExpanded(!expanded);
} else if (onFileClick) {
onFileClick(node);
}
};
// Get the appropriate icon component based on node type and state
const IconComponent = node.type === "folder" ? (0, _DataTree2.getFolderIcon)(expanded) : (0, _DataTree2.getFileIcon)(node.name);
// Get the icon color based on node type
const iconColor = (0, _DataTree2.getIconColor)(node.type, expanded);
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
style: {
display: "flex",
alignItems: "center",
padding: "4px 0",
paddingLeft: "".concat(level * TREE_NODE_PADDING, "px"),
cursor: "pointer",
userSelect: "none"
},
onClick: handleClick
}, node.type === "folder" && hasChildren && (expanded ? /*#__PURE__*/_react.default.createElement(_md.MdKeyboardArrowDown, {
style: {
marginRight: "5px"
}
}) : /*#__PURE__*/_react.default.createElement(_md.MdKeyboardArrowRight, {
style: {
marginRight: "5px"
}
})), node.type === "folder" && !hasChildren && /*#__PURE__*/_react.default.createElement("span", {
style: {
width: "24px"
}
}), /*#__PURE__*/_react.default.createElement(IconComponent, {
style: {
marginRight: "5px",
color: iconColor
}
}), /*#__PURE__*/_react.default.createElement("span", null, node.name)), expanded && hasChildren && ((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.map(childNode => /*#__PURE__*/_react.default.createElement(TreeNodeComponent, {
key: childNode.id,
node: childNode,
level: level + 1,
onFileClick: onFileClick
}))));
};
// Main Tree Component
const Tree = _ref2 => {
let {
data = _DataTree.default.data,
onFileClick
} = _ref2;
return /*#__PURE__*/_react.default.createElement("div", {
style: {
fontFamily: "Arial, sans-serif"
}
}, data === null || data === void 0 ? void 0 : data.map(node => /*#__PURE__*/_react.default.createElement(TreeNodeComponent, {
key: node.id,
node: node,
level: 0,
onFileClick: onFileClick
})));
};
exports.Tree = Tree;
var _default = exports.default = Tree;