Astral-nook/resources/assets/scripts/components/server/components/filemanager/modals/DownloadFileModal.vue
2019-03-16 17:16:34 -07:00

50 lines
1.9 KiB
Vue

<template>
<SpinnerModal :visible="true">
Downloading {{ file.name }}...
</SpinnerModal>
</template>
<script lang="ts">
import Vue from 'vue';
import SpinnerModal from "../../../../core/SpinnerModal.vue";
import {DirectoryContentObject} from '@/api/server/types';
import {mapState} from "vuex";
import {ServerState} from '@/store/types';
import { join } from 'path';
import {AxiosError} from "axios";
import {getDownloadToken} from '@/api/server/files/getDownloadToken';
export default Vue.extend({
components: { SpinnerModal },
computed: mapState('server', {
credentials: (state: ServerState) => state.credentials,
fm: (state: ServerState) => state.fm,
}),
props: {
file: { type: Object as () => DirectoryContentObject, required: true },
},
/**
* This modal works differently than the other modals that exist for the file manager.
* When it is mounted we will immediately show the spinner, and then begin the operation
* to get the download token and redirect the user to that new URL.
*/
mounted: function () {
const path = join(this.fm.currentDirectory, this.file.name);
getDownloadToken(this.$route.params.id, path)
.then((token) => {
if (token) {
window.location.href = `${this.credentials.node}/v1/server/file/download/${token}`;
}
})
.catch((error: AxiosError) => {
alert(`There was an error trying to download this ${this.file.directory ? 'folder' : 'file'}: ${error.message}`);
console.error('Error at Server::Files::Download', {error});
})
.then(() => this.$emit('close'));
},
})
</script>