Add a loading icon for deck upload

This commit is contained in:
Adam Goldsmith 2019-01-06 10:20:42 -05:00
parent 62e92eaf92
commit 82539bfc60
2 changed files with 36 additions and 2 deletions

View File

@ -4,6 +4,7 @@
<div id="controls">
<div>
<button type="button" @click="upload"> Save Deck </button>
<Loader :loading="uploading"></Loader>
Download:
<button type="button" @click="jsonInputDownload">
Input JSON
@ -57,14 +58,16 @@
<script>
import yaml from 'js-yaml';
import Deck from './Deck.vue';
import Loader from './Loader.vue';
export default {
name: 'Editor',
components: {Deck},
components: {Deck, Loader},
props: ['deckID'],
data() {
return {
uploading: false,
selected: null,
deckInfo: {meta: {name: "", type: ""},
cards: {}},
@ -119,6 +122,7 @@
upload() {
// POST the inputed json to the server
this.uploading = true;
fetch('/upload', {
method: 'post',
headers: {'Content-Type': 'application/json'},
@ -129,7 +133,10 @@
css: document.styleSheets[0].href,
})})
.then(r => r.json())
.then(j => this.$router.replace('/edit/' + j.id))
.then(j => {
this.$router.replace('/edit/' + j.id);
this.uploading = false;
})
.catch(err => console.log('Failed to upload' + err));
},
},

27
src/Loader.vue Normal file
View File

@ -0,0 +1,27 @@
<template>
<div v-show="loading" class="loader"> </div>
</template>
<script>
export default {
name: "Loader",
props: ['loading'],
}
</script>
<style>
.loader {
display: inline-block;
border: .33em solid #f3f3f3; /* Light grey */
border-top: .33em solid #3498db; /* Blue */
border-radius: 50%;
width: .33em;
height: .33em;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>