-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathfilepond-rails.js
More file actions
69 lines (64 loc) · 2.08 KB
/
filepond-rails.js
File metadata and controls
69 lines (64 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { DirectUpload } from '@rails/activestorage'
import * as FilePond from 'filepond'
let FilePondRails = {
directUploadUrl: null,
input: null,
default_options: {
server: {
process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {
const uploader = new DirectUpload(file, FilePondRails.directUploadUrl, {
directUploadWillStoreFileWithXHR: (request) => {
request.upload.addEventListener(
'progress',
event => progress(event.lengthComputable, event.loaded, event.total)
)
}
})
uploader.create((errorResponse, blob) => {
if (errorResponse) {
error(`Something went wrong: ${errorResponse}`)
} else {
const hiddenField = document.createElement('input')
hiddenField.setAttribute('type', 'hidden')
hiddenField.setAttribute('value', blob.signed_id)
hiddenField.name = FilePondRails.input.name
document.querySelector('form').appendChild(hiddenField)
load(blob.signed_id)
}
})
return {
abort: () => abort()
}
},
fetch: {
url: './filepond/active_storage/fetch',
method: 'POST',
onload: (response) => {
console.log(response)
return response
},
ondata: (response) => {
console.log(response)
return response
}
},
revert: {
url: './filepond/active_storage/remove'
},
headers: {
'X-CSRF-Token': document.head.querySelector("[name='csrf-token']").content
}
}
},
// Convenience method to initialize FilePond based on the way this gem expects things to work
create: function(input, options = {}) {
FilePondRails.directUploadUrl = input.dataset.directUploadUrl
FilePondRails.input = input
// Initialize FilePond on our element
return FilePond.create(input, {...FilePondRails.default_options, ...options})
}
}
export {
FilePond as FilePond,
FilePondRails as FilePondRails
}