diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2021-04-10 21:35:13 -0500 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2021-04-10 21:35:13 -0500 |
| commit | 74e6cc31e83ad570a9f06765d288e9024736e73f (patch) | |
| tree | a9757e9ffa099a3d3be5786d20d623e2ce933855 /src/components/ActionBar.vue | |
| parent | ea8dcfe3bf1ebe84ac483bb91e37ee4faa0d77ea (diff) | |
Commit MVP
Diffstat (limited to 'src/components/ActionBar.vue')
| -rw-r--r-- | src/components/ActionBar.vue | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/components/ActionBar.vue b/src/components/ActionBar.vue new file mode 100644 index 0000000..96dbaae --- /dev/null +++ b/src/components/ActionBar.vue @@ -0,0 +1,75 @@ +<template> + <div> + <file-upload + :accept="'text/plain'" + :multiple="true" + @file-changed="handlePtChange">Upload PT Schedule</file-upload> + <file-upload + :accept="'application/json'" + @file-changed="handleLabChange">Upload Lab Schedule</file-upload> + <button @click="save">Export</button> + </div> +</template> + +<script> +import FileUpload from '@/components/FileUpload.vue'; + +import { parseLabFile, parsePtSchedule } from '@/features/parser'; + +export default { + name: 'ActionBar', + components: { + FileUpload, + }, + methods: { + handleLabChange(files) { + parseLabFile(files[0]) + .then((data) => { + this.$store.commit('importLabs', data); + }) + .catch((error) => { + console.error(error); + }); + }, + handlePtChange(files) { + const result = []; + const promises = []; + + files.forEach((file) => { + const p = parsePtSchedule(file).then((data) => result.push(data)); + promises.push(p); + }); + + Promise.all(promises) + .then(() => { + this.$store.commit('addPeerTeachers', result); + }); + }, + save() { + const database = { + labs: Object.fromEntries(this.$store.state.labs), + peerTeachers: Object.fromEntries(this.$store.state.peerTeachers), + }; + + const jsonObj = JSON.stringify(database, (_, value) => { + if (typeof value === 'object' && value instanceof Set) { + return [...value]; + } + return value; + }); + + const blob = new Blob([jsonObj], { type: 'text/json' }); + const anchor = document.createElement('a'); + const url = window.URL.createObjectURL(blob); + anchor.href = url; + anchor.download = 'pt-db.json'; + anchor.style = 'display: none'; + + document.body.appendChild(anchor); + anchor.click(); + document.body.removeChild(anchor); + window.URL.revokeObjectURL(url); + }, + }, +}; +</script> |
