import React from 'react'; import TreeNodeView from './tree-node-view'; import Tree from './tree'; class TreeView extends React.PureComponent { static defaultProps = { paddingLeft: 20 }; imagePreviewTimeout = null state = { tree: new Tree(), loadingFailed: false, imagePreviewPosition: { left: 10+'px', top: 10+'px' }, isShowImagePreview: false, imagePreviewLoading: false, imageSrc: '', } showImagePreview = (e, node) => { e.persist(); let type = e.target.getAttribute('type'); if (type === 'image') { this.imagePreviewTimeout = setTimeout(() => { let X = e.clientX + 20; let Y = e.clientY - 55; if (e.view.innerHeight < e.clientY + 150) { Y = e.clientY - 219; } this.setState({ isShowImagePreview: true, imagePreviewLoading: true, imageSrc: this.props.editorUtilities.getFileURL(node), imagePreviewPosition: { left: X + 'px', top: Y + 'px' } }); }, 1000) } } hideImagePreview = (e) => { clearTimeout(this.imagePreviewTimeout); this.setState({ isShowImagePreview: false, imagePreviewLoading: false, }); } imageLoaded = () => { this.setState({ imagePreviewLoading: false, }); } componentDidMount() { this.props.editorUtilities.getFiles().then((files) => { // construct the tree object var rootObj = { name: '/', type: 'dir', isExpanded: true } var treeData = new Tree(); treeData.parseFromList(rootObj, files); this.setState({ tree: treeData }) }, () => { console.log("failed to load files"); this.setState({ loadingFailed: true }) }) } render() { const tree = this.state.tree; if (!tree.root) { return