import { h, Component } from 'preact' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { Link } from 'react-router-dom'; import moment from 'moment/min/moment.min' import util from '../util' const fieldSet = util.fieldSet(new Set(['name', 'date', 'size'])) export const FileList = props => { const { files, fields, sort, title, linkFiles, onClick, onClickParent, onDelete, groupDirectories, parentDirectory, orderBy='name asc', className='', fileListClassName='filelist', rowClassName='row file', options, } = props const { mapFn, sortFn } = util.sort.orderByFn(orderBy) let sortedFiles = (files || []) .filter(f => !!f) .map(mapFn) .sort(sortFn) if (groupDirectories) { const groupedFiles = sortedFiles.reduce((a,b) => { a[b[1].dir].push(b); return a }, { true: [], false: [] }) sortedFiles = groupedFiles.true.concat(groupedFiles.false) } const fileFields = fieldSet(fields) let thumbnails = null if (fileFields.has('thumbnail')) { thumbnails = (
{sortedFiles.map(pair => (
))}
) } const fileList = sortedFiles.map(pair => { return }) if (!fileList || !fileList.length) { return (

No files

) } // console.log(files) return (
{title &&

{title}

}
}
{parentDirectory &&
onClickParent && onClickParent(e)}> Parent Directory
} {thumbnails} {fileList}
) } export const FileRow = props => { const { file, linkFiles, onDelete, onClick, className='row file', username='', options } = props const fields = fieldSet(props.fields) const size = util.hush_size(file.size) const date = file.date || file.created_at const epoch = file.epoch || file.epochs || 0 const count = file.count || 0 let name; let key; if (file.name) { name = file.name key = name } else if (file.url) { if (file.opt && file.opt.type) { name = file.opt.type + ': ' + file.opt.title key = file.opt.token } else { name = file.url.replace(/^https?:\/\//, '') key = name } } return (
{fields.has('name') &&
{file.persisted === false ? {name} : (linkFiles && file.url) ? { if (!(e.metaKey || e.ctrlKey || e.altKey) && onClick) { e.preventDefault(); onClick && onClick(file, e) }}} href={file.url}>{name} : onClick && onClick(file, e)}>{name} }
} {fields.has('age') &&
{util.get_age(date)}
} {fields.has('username') &&
{username}
} {fields.has('epoch') &&
{epoch > 0 ? 'ep. ' + epoch : ''}
} {fields.has('date') &&
{moment(date).format("YYYY-MM-DD")}
} {fields.has('datetime') &&
{moment(date).format("YYYY-MM-DD")} {moment(date).format("H:mm")}
} {fields.has('size') &&
{size[1]}
} {fields.has('count') &&
{count > 0 ? count + ' files' : ''}
} {(fields.has('activity') || fields.has('module')) &&
{fields.has('activity') && file.activity} {fields.has('module') && file.module}
} {fields.has('delete') && onDelete && file.id &&
onDelete(file)}>x
} {fields.has('deleteLink') && onDelete && file.id &&
onDelete(file)}>Delete
} {options && props.options(file)}
) }