Files
docuseal/app/javascript/elements/file_dropzone.js
T

55 lines
1.2 KiB
JavaScript
Raw Normal View History

2023-05-28 23:20:48 +03:00
import { actionable } from '@github/catalyst/lib/actionable'
import { target, targetable } from '@github/catalyst/lib/targetable'
export default actionable(targetable(class extends HTMLElement {
static [target.static] = [
'loading',
2023-06-24 12:27:34 +03:00
'icon',
'input'
2023-05-28 23:20:48 +03:00
]
connectedCallback () {
this.addEventListener('drop', this.onDrop)
this.addEventListener('dragover', (e) => e.preventDefault())
document.addEventListener('turbo:submit-end', this.toggleLoading)
}
disconnectedCallback () {
document.removeEventListener('turbo:submit-end', this.toggleLoading)
2023-05-28 23:20:48 +03:00
}
onDrop (e) {
e.preventDefault()
this.input.files = e.dataTransfer.files
2023-05-28 23:20:48 +03:00
this.uploadFiles(e.dataTransfer.files)
}
onSelectFiles (e) {
e.preventDefault()
this.uploadFiles(this.input.files)
2023-05-28 23:20:48 +03:00
}
2023-08-31 01:12:24 +03:00
toggleLoading = (e) => {
if (e && e.target && !e.target.contains(this)) {
return
}
2023-06-24 12:27:34 +03:00
this.loading.classList.toggle('hidden')
this.icon.classList.toggle('hidden')
this.classList.toggle('opacity-50')
}
2024-04-06 15:00:30 +03:00
uploadFiles () {
2023-06-24 12:27:34 +03:00
this.toggleLoading()
2024-04-06 15:00:30 +03:00
if (this.dataset.submitOnUpload) {
this.closest('form').querySelector('button[type="submit"]').click()
}
2023-05-28 23:20:48 +03:00
}
}))