import { h, Component } from 'preact' import client from '../../../client.js' import FileUploadButton from './FileUploadButton.jsx' import TaskContentLink from '../../../containers/taskContentLink.js' import TaskStyleLink from '../../../containers/taskStyleLink.js' export default class Folder extends Component { constructor(props) { super() this.state = { files: props.folder.files || [], } this.addFiles = this.addFiles.bind(this) if (! props.folder.files) { client.file.index({ folder_id: props.folder.id }).then( files => this.setState({ files }) ) } this.audio = document.createElement('audio') } addFiles(newFiles) { if (! newFiles) return const files = this.state.files.concat(newFiles).sort( (a,b) => { return b.id - a.id } ) this.setState({ files }) } handleClick(file) { if (file.type === 'audio') { this.audio.setAttribute('src', mp3path(file)) this.audio.play() document.body.style.backgroundImage = 'url(' + pngpath(file) + ')' } } render() { const files = (this.state.files).map(toFilenamePair).sort(sortByFilename).map(fromPair).map( (file, i) => { if (! file) return return (
this.handleClick(file)}>{file.name} {file.mime} content style
) }) return (
{this.props.folder.name}
{files}
) } } function toFilenamePair (file) { return [file.name.toLowerCase(), file] } function sortByFilename (a,b) { return a[0] < b[0] ? -1 : a[0] == b[0] ? 0 : 1 } function fromPair (pair) { return pair[1] } function filepath (file) { return '/data/' + file.folder_id + '/' + encodeURIComponent(file.name) } function mp3path (file) { if (file.mime !== 'audio/mp3') { return filepath(file) + '.mp3' } return filepath(file) } function pngpath (file) { return filepath(file) + '.png' }