Skip to content

Commit

Permalink
Add opts.disabled for the Dashboard (#2768)
Browse files Browse the repository at this point in the history
* Introduce opts.disabled for the Dashboard

* Reduce opacity, disable user-select, set cursor

* Add classes to providers' background circles

So they can be grayscaled via css

* add disableAllFocusableElements and run it in afterUpdate hook, if needed

* increase opacity for readability

* Store previous tabindex value and use it when restoring (setting disable: false)

//cc @goto-bus-stop

* Add disabled docs

* add disabled option to website example

Co-authored-by: Alexander Zaytsev <nqst@users.noreply.github.com>
  • Loading branch information
arturi and nqst authored Feb 26, 2021
1 parent bcdac14 commit 8a60cf1
Show file tree
Hide file tree
Showing 19 changed files with 106 additions and 19 deletions.
2 changes: 1 addition & 1 deletion packages/@uppy/box/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = class Box extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#0061D5" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#0061D5" width="32" height="32" rx="16" />
<g fill="#fff" fill-rule="nonzero">
<path d="m16.4 13.5c-1.6 0-3 0.9-3.7 2.2-0.7-1.3-2.1-2.2-3.7-2.2-1 0-1.8 0.3-2.5 0.8v-3.6c-0.1-0.3-0.5-0.7-1-0.7s-0.8 0.4-0.8 0.8v7c0 2.3 1.9 4.2 4.2 4.2 1.6 0 3-0.9 3.7-2.2 0.7 1.3 2.1 2.2 3.7 2.2 2.3 0 4.2-1.9 4.2-4.2 0.1-2.4-1.8-4.3-4.1-4.3m-7.5 6.8c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5m7.5 0c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5" />
<path d="m27.2 20.6l-2.3-2.8 2.3-2.8c0.3-0.4 0.2-0.9-0.2-1.2s-1-0.2-1.3 0.2l-2 2.4-2-2.4c-0.3-0.4-0.9-0.4-1.3-0.2-0.4 0.3-0.5 0.8-0.2 1.2l2.3 2.8-2.3 2.8c-0.3 0.4-0.2 0.9 0.2 1.2s1 0.2 1.3-0.2l2-2.4 2 2.4c0.3 0.4 0.9 0.4 1.3 0.2 0.4-0.3 0.4-0.8 0.2-1.2" />
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/dashboard/src/components/AddFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ class AddFiles extends Component {
>
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect width="32" height="32" rx="16" fill="#2275D7" />
<rect class="uppy-ProviderIconBg" width="32" height="32" rx="16" fill="#2275D7" />
<path d="M21.973 21.152H9.863l-1.108-5.087h14.464l-1.246 5.087zM9.935 11.37h3.958l.886 1.444a.673.673 0 0 0 .585.316h6.506v1.37H9.935v-3.13zm14.898 3.44a.793.793 0 0 0-.616-.31h-.978v-2.126c0-.379-.275-.613-.653-.613H15.75l-.886-1.445a.673.673 0 0 0-.585-.316H9.232c-.378 0-.667.209-.667.587V14.5h-.782a.793.793 0 0 0-.61.303.795.795 0 0 0-.155.663l1.45 6.633c.078.36.396.618.764.618h13.354c.36 0 .674-.246.76-.595l1.631-6.636a.795.795 0 0 0-.144-.675z" fill="#FFF" />
</g>
</svg>
Expand Down
2 changes: 2 additions & 0 deletions packages/@uppy/dashboard/src/components/Dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module.exports = function Dashboard (props) {

const dashboardClassName = classNames({
'uppy-Dashboard': true,
'uppy-Dashboard--isDisabled': props.disabled,
'uppy-Dashboard--animateOpenClose': props.animateOpenClose,
'uppy-Dashboard--isClosing': props.isClosing,
'uppy-Dashboard--isDraggingOver': props.isDraggingOver,
Expand Down Expand Up @@ -59,6 +60,7 @@ module.exports = function Dashboard (props) {
data-uppy-num-acquirers={props.acquirers.length}
data-uppy-drag-drop-supported={isDragDropSupported()}
aria-hidden={props.inline ? 'false' : props.isHidden}
aria-disabled={props.disabled}
aria-label={!props.inline ? props.i18n('dashboardWindowTitle') : props.i18n('dashboardTitle')}
onpaste={props.handlePaste}
onDragOver={props.handleDragOver}
Expand Down
51 changes: 50 additions & 1 deletion packages/@uppy/dashboard/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const cuid = require('cuid')
const ResizeObserver = require('resize-observer-polyfill').default || require('resize-observer-polyfill')
const createSuperFocus = require('./utils/createSuperFocus')
const memoize = require('memoize-one').default || require('memoize-one')
const FOCUSABLE_ELEMENTS = require('@uppy/utils/lib/FOCUSABLE_ELEMENTS')

const TAB_KEY = 9
const ESC_KEY = 27
Expand Down Expand Up @@ -145,7 +146,8 @@ module.exports = class Dashboard extends Plugin {
showRemoveButtonAfterComplete: false,
browserBackButtonClose: false,
theme: 'light',
autoOpenFileEditor: false
autoOpenFileEditor: false,
disabled: false
}

// merge default options with the ones set by user
Expand Down Expand Up @@ -502,6 +504,29 @@ module.exports = class Dashboard extends Plugin {
}
}

disableAllFocusableElements = (disable) => {
const focusableNodes = toArray(this.el.querySelectorAll(FOCUSABLE_ELEMENTS))
if (disable) {
focusableNodes.forEach((node) => {
// save previous tabindex in a data-attribute, to restore when enabling
const currentTabIndex = node.getAttribute('tabindex')
if (currentTabIndex) {
node.dataset.inertTabindex = currentTabIndex
}
node.setAttribute('tabindex', '-1')
})
} else {
focusableNodes.forEach((node) => {
if ('inertTabindex' in node.dataset) {
node.setAttribute('tabindex', node.dataset.inertTabindex)
} else {
node.removeAttribute('tabindex')
}
})
}
this.dashboardIsDisabled = disable
}

updateBrowserHistory = () => {
// Ensure history state does not already contain our modal name to avoid double-pushing
if (!history.state || !history.state[this.modalName]) {
Expand Down Expand Up @@ -565,6 +590,10 @@ module.exports = class Dashboard extends Plugin {
event.preventDefault()
event.stopPropagation()

if (this.opts.disabled) {
return
}

// 1. Add a small (+) icon on drop
// (and prevent browsers from interpreting this as files being _moved_ into the browser, https://github.com/transloadit/uppy/issues/1978)
event.dataTransfer.dropEffect = 'copy'
Expand All @@ -577,6 +606,10 @@ module.exports = class Dashboard extends Plugin {
event.preventDefault()
event.stopPropagation()

if (this.opts.disabled) {
return
}

clearTimeout(this.removeDragOverClassTimeout)
// Timeout against flickering, this solution is taken from drag-drop library. Solution with 'pointer-events: none' didn't work across browsers.
this.removeDragOverClassTimeout = setTimeout(() => {
Expand All @@ -587,6 +620,11 @@ module.exports = class Dashboard extends Plugin {
handleDrop = (event, dropCategory) => {
event.preventDefault()
event.stopPropagation()

if (this.opts.disabled) {
return
}

clearTimeout(this.removeDragOverClassTimeout)

// 2. Remove dragover class
Expand Down Expand Up @@ -758,6 +796,15 @@ module.exports = class Dashboard extends Plugin {
}

afterUpdate = () => {
if (this.opts.disabled && !this.dashboardIsDisabled) {
this.disableAllFocusableElements(true)
return
}

if (!this.opts.disabled && this.dashboardIsDisabled) {
this.disableAllFocusableElements(false)
}

this.superFocusOnEachUpdate()
}

Expand Down Expand Up @@ -893,9 +940,11 @@ module.exports = class Dashboard extends Plugin {
allowNewUpload,
acquirers,
theme,
disabled: this.opts.disabled,
direction: this.opts.direction,
activePickerPanel: pluginState.activePickerPanel,
showFileEditor: pluginState.showFileEditor,
disableAllFocusableElements: this.disableAllFocusableElements,
animateOpenClose: this.opts.animateOpenClose,
isClosing: pluginState.isClosing,
getPlugin: this.uppy.getPlugin,
Expand Down
19 changes: 17 additions & 2 deletions packages/@uppy/dashboard/src/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@
[data-uppy-theme="dark"] & {
background-color: $gray-900;
}

.uppy-Dashboard--isDisabled & {
cursor: not-allowed;
}
}

.uppy-Dashboard-innerWrap {
Expand All @@ -149,12 +153,23 @@
position: relative;
border-radius: 5px;
opacity: 0;
}

.uppy-Dashboard--isInnerWrapVisible .uppy-Dashboard-innerWrap {
.uppy-Dashboard--isInnerWrapVisible & {
opacity: 1;
}

.uppy-Dashboard--isDisabled & {
pointer-events: none;
opacity: 0.6;
filter: grayscale(100%);
user-select: none;
}
}

.uppy-Dashboard--isDisabled .uppy-ProviderIconBg {
fill: #9f9f9f;
}

.uppy-Dashboard--modal .uppy-Dashboard-inner {
position: fixed;
top: 35px;
Expand Down
2 changes: 2 additions & 0 deletions packages/@uppy/dashboard/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ declare module Dashboard {
thumbnailWidth?: number
trigger?: string
width?: string | number
autoOpenFileEditor?: boolean
disabled?: boolean
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/dropbox/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = class Dropbox extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#0D2481" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#0D2481" width="32" height="32" rx="16" />
<path d="M11 8l5 3.185-5 3.186-5-3.186L11 8zm10 0l5 3.185-5 3.186-5-3.186L21 8zM6 17.556l5-3.185 5 3.185-5 3.186-5-3.186zm15-3.185l5 3.185-5 3.186-5-3.186 5-3.185zm-10 7.432l5-3.185 5 3.185-5 3.186-5-3.186z" fill="#FFF" fill-rule="nonzero" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/facebook/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = class Facebook extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect width="32" height="32" rx="16" fill="#3C5A99" />
<rect class="uppy-ProviderIconBg" width="32" height="32" rx="16" fill="#3C5A99" />
<path d="M17.842 26v-8.667h2.653l.398-3.377h-3.051v-2.157c0-.978.248-1.644 1.527-1.644H21V7.132A19.914 19.914 0 0 0 18.623 7c-2.352 0-3.963 1.574-3.963 4.465v2.49H12v3.378h2.66V26h3.182z" fill="#FFF" fill-rule="nonzero" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/google-drive/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = class GoogleDrive extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#4285F4" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#4285F4" width="32" height="32" rx="16" />
<path d="M10.324 23.3l3-5.1H25l-3 5.1H10.324zM13 18.2l-3 5.1-3-5.1 5.839-9.924 2.999 5.1L13 18.2zm11.838-.276h-6L13 8h6l5.84 9.924h-.002z" fill="#FFF" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/instagram/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = class Instagram extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#E1306C" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#E1306C" width="32" height="32" rx="16" />
<path d="M16 8.622c2.403 0 2.688.009 3.637.052.877.04 1.354.187 1.67.31.392.144.745.374 1.036.673.299.29.529.644.673 1.035.123.317.27.794.31 1.671.043.95.052 1.234.052 3.637s-.009 2.688-.052 3.637c-.04.877-.187 1.354-.31 1.671a2.98 2.98 0 0 1-1.708 1.708c-.317.123-.794.27-1.671.31-.95.043-1.234.053-3.637.053s-2.688-.01-3.637-.053c-.877-.04-1.354-.187-1.671-.31a2.788 2.788 0 0 1-1.035-.673 2.788 2.788 0 0 1-.673-1.035c-.123-.317-.27-.794-.31-1.671-.043-.949-.052-1.234-.052-3.637s.009-2.688.052-3.637c.04-.877.187-1.354.31-1.67.144-.392.374-.745.673-1.036.29-.299.644-.529 1.035-.673.317-.123.794-.27 1.671-.31.95-.043 1.234-.052 3.637-.052zM16 7c-2.444 0-2.75.01-3.71.054-.959.044-1.613.196-2.185.419-.6.225-1.145.58-1.594 1.038-.458.45-.813.993-1.039 1.594-.222.572-.374 1.226-.418 2.184C7.01 13.25 7 13.556 7 16s.01 2.75.054 3.71c.044.959.196 1.613.419 2.185.226.6.58 1.145 1.038 1.594.45.458.993.813 1.594 1.038.572.223 1.227.375 2.184.419.96.044 1.267.054 3.711.054s2.75-.01 3.71-.054c.959-.044 1.613-.196 2.185-.419a4.602 4.602 0 0 0 2.632-2.632c.223-.572.375-1.226.419-2.184.044-.96.054-1.267.054-3.711s-.01-2.75-.054-3.71c-.044-.959-.196-1.613-.419-2.185A4.412 4.412 0 0 0 23.49 8.51a4.412 4.412 0 0 0-1.594-1.039c-.572-.222-1.226-.374-2.184-.418C18.75 7.01 18.444 7 16 7zm0 4.5a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9zm0 7.421a2.921 2.921 0 1 1 0-5.842 2.921 2.921 0 0 1 0 5.842zm4.875-6.671a1.125 1.125 0 1 1 0-2.25 1.125 1.125 0 0 1 0 2.25z" fill="#FFF" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/onedrive/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = class OneDrive extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect width="32" height="32" rx="16" fill="#0262C0" />
<rect class="uppy-ProviderIconBg" width="32" height="32" rx="16" fill="#0262C0" />
<g fill="#FFF" fill-rule="nonzero">
<path d="M24.157 22s1.492-.205 1.79-1.655a2.624 2.624 0 0 0 .03-.878c-.22-1.64-1.988-2.01-1.988-2.01s.307-1.765-1.312-2.69c-1.62-.925-3.1 0-3.1 0S18.711 13 16.366 13c-3.016 0-3.519 3.448-3.519 3.448S10 16.618 10 19.14c0 2.523 2.597 2.86 2.597 2.86h11.56z" />
<path d="M9.421 19.246c0-2.197 1.606-3.159 2.871-3.472.44-1.477 1.654-3.439 4.135-3.439H16.445c1.721 0 2.79.823 3.368 1.476a3.99 3.99 0 0 1 1.147-.171h.01l.03.002C21.017 13.5 20.691 10 16.757 10c-2.69 0-3.639 2.345-3.639 2.345s-1.95-1.482-3.955.567c-1.028 1.052-.79 2.669-.79 2.669S6 15.824 6 18.412C6 20.757 8.452 21 8.452 21h1.372a3.77 3.77 0 0 1-.403-1.754z" />
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/screen-capture/src/ScreenRecIcon.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module.exports = () => {
return (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#2C3E50" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#2C3E50" width="32" height="32" rx="16" />
<path d="M24.182 9H7.818C6.81 9 6 9.742 6 10.667v10c0 .916.81 1.666 1.818 1.666h4.546V24h7.272v-1.667h4.546c1 0 1.809-.75 1.809-1.666l.009-10C26 9.742 25.182 9 24.182 9zM24 21H8V11h16v10z" fill="#FFF" fill-rule="nonzero" />
<circle fill="#FFF" cx="16" cy="16" r="2" />
</g>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/unsplash/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module.exports = class Unsplash extends Plugin {
this.icon = () => (
<svg viewBox="0 0 32 32" height="32" width="32" aria-hidden="true">
<path d="M46.575 10.883v-9h12v9zm12 5h10v18h-32v-18h10v9h12z" fill="#fff" />
<rect width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" width="32" height="32" rx="16" />
<path d="M13 12.5V8h6v4.5zm6 2.5h5v9H8v-9h5v4.5h6z" fill="#fff" />
</svg>
)
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/url/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ function UrlIcon () {
return (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#FF753E" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#FF753E" width="32" height="32" rx="16" />
<path d="M22.788 15.389l-2.199 2.19a3.184 3.184 0 0 1-.513.437c-.806.584-1.686.876-2.638.876a4.378 4.378 0 0 1-3.519-1.752c-.22-.292-.146-.802.147-1.021.293-.22.806-.146 1.026.146.953 1.313 2.785 1.532 4.105.583a.571.571 0 0 0 .293-.292l2.199-2.189c1.1-1.167 1.1-2.992-.073-4.086a2.976 2.976 0 0 0-4.105 0l-1.246 1.24a.71.71 0 0 1-1.026 0 .703.703 0 0 1 0-1.022l1.246-1.24a4.305 4.305 0 0 1 6.083 0c1.833 1.605 1.906 4.451.22 6.13zm-7.183 5.035l-1.246 1.24a2.976 2.976 0 0 1-4.105 0c-1.172-1.094-1.172-2.991-.073-4.086l2.2-2.19.292-.291c.66-.438 1.393-.657 2.2-.584.805.146 1.465.51 1.905 1.168.22.292.733.365 1.026.146.293-.22.367-.73.147-1.022-.733-.949-1.76-1.532-2.859-1.678-1.1-.22-2.272.073-3.225.802l-.44.438-2.199 2.19c-1.686 1.75-1.612 4.524.074 6.202.88.803 1.979 1.241 3.078 1.241 1.1 0 2.199-.438 3.079-1.24l1.246-1.241a.703.703 0 0 0 0-1.022c-.294-.292-.807-.365-1.1-.073z" fill="#FFF" fill-rule="nonzero" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/webcam/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ module.exports = class Webcam extends Plugin {
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<g fill="none" fill-rule="evenodd">
<rect fill="#03BFEF" width="32" height="32" rx="16" />
<rect class="uppy-ProviderIconBg" fill="#03BFEF" width="32" height="32" rx="16" />
<path d="M22 11c1.133 0 2 .867 2 2v7.333c0 1.134-.867 2-2 2H10c-1.133 0-2-.866-2-2V13c0-1.133.867-2 2-2h2.333l1.134-1.733C13.6 9.133 13.8 9 14 9h4c.2 0 .4.133.533.267L19.667 11H22zm-6 1.533a3.764 3.764 0 0 0-3.8 3.8c0 2.129 1.672 3.801 3.8 3.801s3.8-1.672 3.8-3.8c0-2.13-1.672-3.801-3.8-3.801zm0 6.261c-1.395 0-2.46-1.066-2.46-2.46 0-1.395 1.065-2.461 2.46-2.461s2.46 1.066 2.46 2.46c0 1.395-1.065 2.461-2.46 2.461z" fill="#FFF" fill-rule="nonzero" />
</g>
</svg>
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/zoom/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ module.exports = class Zoom extends Plugin {
this.title = this.opts.title || 'Zoom'
this.icon = () => (
<svg aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<rect width="32" height="32" rx="16" fill="#0E71EB" />
<rect class="uppy-ProviderIconBg" width="32" height="32" rx="16" fill="#0E71EB" />
<g fill="none" fill-rule="evenodd">
<path fill="#fff" d="M29,31H14c-1.657,0-3-1.343-3-3V17h15c1.657,0,3,1.343,3,3V31z" style="transform: translate(-5px, -5px) scale(0.9);" />
<polygon fill="#fff" points="37,31 31,27 31,21 37,17" style="transform: translate(-5px, -5px) scale(0.9);" />
Expand Down
15 changes: 15 additions & 0 deletions website/src/docs/dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,21 @@ Automatically open file editor (see [`@uppy/image-editor`](/docs/image-editor/))

Use case: user adds an image — Uppy opens Image Editor right away — user crops / adjusts the image — upload.

### `disabled: false`

Enabling this option makes the Dashboard grayed-out and non-interactive. Users won’t be able to click on buttons or drop files.

Useful when you need to confitionally enable/disable file uploading or manipulation, based on a condition in your app. Can be set on init or via API:

```js
const dashboard = uppy.getPlugin('Dashboard')
dashboard.setOptions({ disabled: true })

userNameInput.addEventListener('change', () => {
dashboard.setOptions({ disabled: false })
})
```

## Methods

### `openModal()`
Expand Down
3 changes: 2 additions & 1 deletion website/src/examples/dashboard/app.es6
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ function uppySetOptions () {

window.uppy.getPlugin('Dashboard').setOptions({
note: opts.restrictions ? 'Images and video only, 2–3 files, up to 1 MB' : '',
theme: opts.darkMode ? 'dark' : 'light'
theme: opts.darkMode ? 'dark' : 'light',
disabled: opts.disabled
})

const googleDriveInstance = window.uppy.getPlugin('GoogleDrive')
Expand Down
9 changes: 6 additions & 3 deletions website/src/examples/dashboard/app.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
<li><label for="opts-DashboardInline"><input type="checkbox" id="opts-DashboardInline" checked/> Display inline</label></li>
<li><label for="opts-autoProceed"><input type="checkbox" id="opts-autoProceed" checked/> Autoproceed</label></li>
<li><label for="opts-restrictions"><input type="checkbox" id="opts-restrictions" checked/> Restrictions</label></li>
<li><label for="opts-darkMode"><input type="checkbox" id="opts-darkMode" /> Dark Mode</label></li>
<li><label for="opts-imageEditor"><input type="checkbox" id="opts-imageEditor" checked/> Image Editor</label></li>
<li><label for="opts-darkMode"><input type="checkbox" id="opts-darkMode" /> Dark Mode</label></li>
<li><label for="opts-disabled"><input type="checkbox" id="opts-disabled" checked/> Disabled</label></li>
</ul>
<ul>
<li><label for="opts-Webcam"><input type="checkbox" id="opts-Webcam" checked/> Webcam</label></li>
Expand Down Expand Up @@ -51,7 +52,8 @@
autoProceed: document.querySelector('#opts-autoProceed'),
restrictions: document.querySelector('#opts-restrictions'),
darkMode: document.querySelector('#opts-darkMode'),
imageEditor: document.querySelector('#opts-imageEditor')
imageEditor: document.querySelector('#opts-imageEditor'),
disabled: document.querySelector('#opts-disabled')
}

var defaultOpts = {
Expand All @@ -67,7 +69,8 @@
autoProceed: false,
restrictions: false,
darkMode: false,
imageEditor: true
imageEditor: true,
disabled: false
}

// try to get options from localStorage, if its empty, set to defaultOpts
Expand Down

0 comments on commit 8a60cf1

Please sign in to comment.