@alyzenpublic/react-keyed-file-browser
Version:
Folder based file browser given a flat keyed list of objects, powered by React.
104 lines (94 loc) • 2.82 kB
JavaScript
import React from 'react'
import ClassNames from 'classnames'
import { DragSource, DropTarget } from 'react-dnd'
import { NativeTypes } from 'react-dnd-html5-backend'
import BaseFolder, { BaseFolderConnectors } from './../base-folder.js'
import { BaseFileConnectors } from './../base-file.js'
class RawTableFolder extends BaseFolder {
render() {
const {
isOpen, isDragging, isDeleting, isRenaming, isDraft, isOver, isSelected,
action, url, browserProps, connectDragPreview, depth,
} = this.props
const icon = browserProps.icons[isOpen ? 'FolderOpen' : 'Folder']
const inAction = (isDragging || action)
let name
if (!inAction && isDeleting) {
name = (
<form className="deleting" onSubmit={this.handleDeleteSubmit}>
<a
href={url}
download="download"
onClick={this.handleFileClick}
>
{icon}
{this.getName()}
</a>
<div>
<button type="submit">
Confirm Deletion
</button>
</div>
</form>
)
} else if ((!inAction && isRenaming) || isDraft) {
name = (
<div>
<form className="renaming" onSubmit={this.handleRenameSubmit}>
{icon}
<input
type="text"
ref={el => { this.newNameRef = el }}
value={this.state.newName}
onChange={this.handleNewNameChange}
onBlur={this.handleCancelEdit}
autoFocus
/>
</form>
</div>
)
} else {
name = (
<div>
<a onClick={this.toggleFolder}>
{icon}
{this.getName()}
</a>
</div>
)
}
if (typeof browserProps.moveFolder === 'function') {
name = connectDragPreview(name)
}
const folder = (
<tr
className={ClassNames('folder', {
pending: action,
dragging: isDragging,
dragover: isOver,
selected: isSelected,
})}
onClick={this.handleFolderClick}
onDoubleClick={this.handleFolderDoubleClick}
>
<td className="name">
<div style={{paddingLeft: (depth * 16) + 'px'}}>
{name}
</div>
</td>
<td />
<td />
</tr>
)
return this.connectDND(folder)
}
}
('folder', BaseFolderConnectors.dragSource, BaseFolderConnectors.dragCollect)
(
['file', 'folder', NativeTypes.FILE],
BaseFileConnectors.targetSource,
BaseFileConnectors.targetCollect,
)
class TableFolder extends RawTableFolder {}
export default TableFolder
export { RawTableFolder }