Skip to content

Commit ec50baa

Browse files
authored
Merge pull request #593 from maebeale/buefy-import-upload
Introduce FileUpload vue component and EntryPoint
2 parents cfd8736 + 16c646d commit ec50baa

File tree

5 files changed

+59
-30
lines changed

5 files changed

+59
-30
lines changed

app/controllers/submission_response_imports_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ def new
44
end
55

66
def create
7-
uploaded_file = params[:submission_response_import]
7+
uploaded_file = params[:submission_response_import][:file]
88

99
SubmissionResponseImportJob.perform_later(
1010
user_id: current_user.id,
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<template>
2+
<b-field class="file has-name is-fullwidth">
3+
<b-upload
4+
v-model="file"
5+
:name="fieldName"
6+
accept=".csv,text/plain"
7+
required
8+
native
9+
expanded
10+
>
11+
<a class="file-cta">
12+
<b-icon class="file-icon" icon="upload"></b-icon>
13+
<span class="file-label">Click to select file</span>
14+
</a>
15+
</b-upload>
16+
17+
<span class="file-name">
18+
{{ file ? file.name : 'Select a file ...' }}
19+
</span>
20+
</b-field>
21+
</template>
22+
23+
<script>
24+
export default {
25+
props: {
26+
fieldName: String,
27+
},
28+
data() {
29+
return {file: null}
30+
},
31+
}
32+
</script>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Vue from 'vue_config'
2+
import FileUpload from '../components/forms/FileUpload'
3+
4+
export default function(el, props) {
5+
new Vue({
6+
el,
7+
render(h) {
8+
return h(FileUpload, {
9+
props: props,
10+
})
11+
}
12+
})
13+
}

app/javascript/entry_points/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ask from './ask'
2+
import fileUpload from './fileUpload'
23
import offer from './offer'
34
import navBar from './navBar'
45
import notice from './notice'
@@ -7,6 +8,7 @@ import orientation from './orientation'
78

89
export {
910
ask,
11+
fileUpload,
1012
offer,
1113
navBar,
1214
notice,
Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,16 @@
1-
<%= form_for :submission_response_import, url: submission_response_imports_path, multipart: true do |f| %>
2-
<div class="title is-3">Submission Response Import</div>
1+
<h1 class="title is-3">Submission Response Import</h1>
32

4-
<div id="file-js-example" class="file has-name">
5-
<label class="file-label">
6-
<input class="file-input" type="file" name="submission_response_import">
7-
<span class="file-cta">
8-
<span class="file-icon">
9-
<i class="fas fa-upload"></i>
10-
</span>
11-
<span class="file-label">
12-
Choose a file…
13-
</span>
14-
</span>
15-
<span class="file-name" style="width: 50em;">
16-
No file uploaded
17-
<%= f.file_field :file %>
18-
</span>
19-
</label>
20-
<%= f.submit "Upload",
21-
class: "button is-primary",
22-
name: nil %>
3+
<%= form_with url: submission_response_imports_path, multipart: true, local: true do |f| %>
4+
<div id="upload">
235
</div>
6+
7+
<%= f.submit "Import", class: "button is-primary" %>
248
<% end %>
259

2610
<script>
27-
const fileInput = document.querySelector('#file-js-example input[type=file]');
28-
fileInput.onchange = () => {
29-
if (fileInput.files.length > 0) {
30-
const fileName = document.querySelector('#file-js-example .file-name');
31-
fileName.textContent = fileInput.files[0].name;
32-
}
33-
}
34-
</script>
11+
document.addEventListener('DOMContentLoaded', () => {
12+
EntryPoints.fileUpload('#upload', {
13+
fieldName: 'submission_response_import[file]',
14+
})
15+
})
16+
</script>

0 commit comments

Comments
 (0)