diff --git a/app/javascript/application.js b/app/javascript/application.js
index cc924ece..8860eb7f 100644
--- a/app/javascript/application.js
+++ b/app/javascript/application.js
@@ -76,6 +76,7 @@ window.customElements.define('template-builder', class extends HTMLElement {
template: reactive(JSON.parse(this.dataset.template)),
backgroundColor: '#faf7f5',
withPhone: this.dataset.withPhone === 'true',
+ acceptFileTypes: this.dataset.acceptFileTypes,
isDirectUpload: this.dataset.isDirectUpload === 'true'
})
diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue
index 66b617a5..35cdf264 100644
--- a/app/javascript/template_builder/builder.vue
+++ b/app/javascript/template_builder/builder.vue
@@ -75,6 +75,7 @@
:with-arrows="template.schema.length > 1"
:item="item"
:document="sortedDocuments[index]"
+ :accept-file-types="acceptFileTypes"
:template="template"
:is-direct-upload="isDirectUpload"
@scroll-to="scrollIntoDocument(item)"
@@ -90,6 +91,7 @@
>
@@ -256,6 +259,11 @@ export default {
required: false,
default: ''
},
+ acceptFileTypes: {
+ type: String,
+ required: false,
+ default: 'image/*, application/pdf'
+ },
baseUrl: {
type: String,
required: false,
diff --git a/app/javascript/template_builder/dropzone.vue b/app/javascript/template_builder/dropzone.vue
index fcfad6ed..a7a17fcc 100644
--- a/app/javascript/template_builder/dropzone.vue
+++ b/app/javascript/template_builder/dropzone.vue
@@ -42,7 +42,7 @@
ref="input"
type="file"
name="files[]"
- accept="image/*, application/pdf"
+ :accept="acceptFileTypes"
multiple
@change="upload"
>
@@ -67,6 +67,11 @@ export default {
type: [Number, String],
required: true
},
+ acceptFileTypes: {
+ type: String,
+ required: false,
+ default: 'image/*, application/pdf'
+ },
isDirectUpload: {
type: Boolean,
required: true,
@@ -89,8 +94,10 @@ export default {
return 'Uploading...'
} else if (this.isProcessing) {
return 'Processing...'
- } else {
+ } else if (this.acceptFileTypes === 'image/*, application/pdf') {
return 'Add PDF documents or images'
+ } else {
+ return 'Add documents or images'
}
}
},
@@ -102,7 +109,7 @@ export default {
methods: {
upload: Upload.methods.upload,
onDropFiles (e) {
- if ([...e.dataTransfer.files].every((f) => f.type.match(/(?:image\/)|(?:application\/pdf)/))) {
+ if (this.acceptFileTypes !== 'image/*, application/pdf' || [...e.dataTransfer.files].every((f) => f.type.match(/(?:image\/)|(?:application\/pdf)/))) {
this.$refs.input.files = e.dataTransfer.files
this.upload()
diff --git a/app/javascript/template_builder/preview.vue b/app/javascript/template_builder/preview.vue
index 16dc1889..1fe268e5 100644
--- a/app/javascript/template_builder/preview.vue
+++ b/app/javascript/template_builder/preview.vue
@@ -18,6 +18,7 @@
@@ -32,6 +32,11 @@ export default {
type: [Number, String],
required: true
},
+ acceptFileTypes: {
+ type: String,
+ required: false,
+ default: 'image/*, application/pdf'
+ },
isDirectUpload: {
type: Boolean,
required: true,
diff --git a/app/javascript/template_builder/upload.vue b/app/javascript/template_builder/upload.vue
index 57022c8b..f34f1049 100644
--- a/app/javascript/template_builder/upload.vue
+++ b/app/javascript/template_builder/upload.vue
@@ -33,7 +33,7 @@
ref="input"
name="files[]"
type="file"
- accept="image/*, application/pdf"
+ :accept="acceptFileTypes"
multiple
@change="upload"
>
@@ -56,6 +56,11 @@ export default {
type: [Number, String],
required: true
},
+ acceptFileTypes: {
+ type: String,
+ required: false,
+ default: 'image/*, application/pdf'
+ },
isDirectUpload: {
type: Boolean,
required: true,
diff --git a/lib/templates/create_attachments.rb b/lib/templates/create_attachments.rb
index 1364940e..74e0da2d 100644
--- a/lib/templates/create_attachments.rb
+++ b/lib/templates/create_attachments.rb
@@ -3,15 +3,20 @@
module Templates
module CreateAttachments
PDF_CONTENT_TYPE = 'application/pdf'
+ InvalidFileType = Class.new(StandardError)
module_function
def call(template, params)
find_or_create_blobs(params).map do |blob|
- document = template.documents.create!(blob:)
-
document_data = blob.download
+ if !blob.image? && blob.content_type != PDF_CONTENT_TYPE
+ blob, document_data = handle_file_types(blob, document_data)
+ end
+
+ document = template.documents.create!(blob:)
+
if blob.content_type == PDF_CONTENT_TYPE && blob.metadata['pdf'].nil?
blob.metadata['pdf'] = { 'annotations' => Templates::BuildAnnotations.call(document_data) }
end
@@ -43,5 +48,9 @@ module Templates
)
end
end
+
+ def handle_file_types(_document_data, blob)
+ raise InvalidFileType, blob.content_type
+ end
end
end