uppy
Version:
Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:
84 lines (72 loc) • 2.86 kB
JavaScript
const FileList = require('./FileList')
const Tabs = require('./Tabs')
const FileCard = require('./FileCard')
const classNames = require('classnames')
const { isTouchDevice } = require('../../core/Utils')
const { closeIcon } = require('./icons')
const { h } = require('preact')
// http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog
// https://github.com/ghosh/micromodal
const renderInnerPanel = (props) => {
return <div style={{ width: '100%', height: '100%' }}>
<div class="uppy-DashboardContent-bar">
<div class="uppy-DashboardContent-title">
{props.i18n('importFrom')} {props.activePanel ? props.activePanel.name : null}
</div>
<button class="uppy-DashboardContent-back"
type="button"
onclick={props.hideAllPanels}>{props.i18n('done')}</button>
</div>
{props.getPlugin(props.activePanel.id).render(props.state)}
</div>
}
module.exports = function Dashboard (props) {
const dashboardClassName = classNames(
'uppy',
'uppy-Dashboard',
{ 'Uppy--isTouchDevice': isTouchDevice() },
{ 'uppy-Dashboard--modal': !props.inline },
{ 'uppy-Dashboard--wide': props.isWide }
)
return (
<div class={dashboardClassName}
aria-hidden={props.inline ? 'false' : props.modal.isHidden}
aria-label={!props.inline ? props.i18n('dashboardWindowTitle') : props.i18n('dashboardTitle')}
onpaste={props.handlePaste}>
<div class="uppy-Dashboard-overlay" tabindex="-1" onclick={props.handleClickOutside} />
<div class="uppy-Dashboard-inner"
aria-modal={!props.inline && 'true'}
role={!props.inline && 'dialog'}
style={{
maxWidth: props.inline && props.maxWidth ? props.maxWidth : '',
maxHeight: props.inline && props.maxHeight ? props.maxHeight : ''
}}>
<button class="uppy-Dashboard-close"
type="button"
aria-label={props.i18n('closeModal')}
title={props.i18n('closeModal')}
onclick={props.closeModal}>
{closeIcon()}
</button>
<div class="uppy-Dashboard-innerWrap">
<Tabs {...props} />
<FileCard {...props} />
<div class="uppy-Dashboard-filesContainer">
<FileList {...props} />
</div>
<div class="uppy-DashboardContent-panel"
role="tabpanel"
id={props.activePanel && `uppy-DashboardContent-panel--${props.activePanel.id}`}
aria-hidden={props.activePanel ? 'false' : 'true'}>
{props.activePanel && renderInnerPanel(props)}
</div>
<div class="uppy-Dashboard-progressindicators">
{props.progressindicators.map((target) => {
return props.getPlugin(target.id).render(props.state)
})}
</div>
</div>
</div>
</div>
)
}