blob: e480ba318f789dda6a14bb3620566c87acb559cb [file] [log] [blame]
<template>
<div>
<storage-path-breadcrumb
v-if="experimentStoragePath"
:parts="experimentStoragePath.parts"
rootName="Exp Data Dir"
@directory-selected="$emit('directory-selected', $event)"
/>
<b-table
v-if="experimentStoragePath"
:fields="fields"
:items="items"
sort-by="name"
>
<template slot="cell(name)" slot-scope="data">
<b-link
v-if="data.item.type === 'dir'"
@click="directorySelected(data.item)"
>
<i class="fa fa-folder-open"></i> {{ data.item.name }}</b-link
>
<b-link v-else :href="data.item.downloadURL" :target="downloadTarget">
{{ data.item.name }}</b-link
>
</template>
<template slot="cell(modifiedTimestamp)" slot-scope="data">
<human-date :date="data.item.modifiedTime" />
</template>
<template slot="cell(actions)" slot-scope="data">
<b-link
v-if="data.item.type === 'file'"
class="action-link"
:href="`${data.item.downloadURL}&download`"
>
Download File
<i class="fa fa-download" aria-hidden="true"></i>
</b-link>
<b-link
v-if="data.item.type === 'dir'"
class="action-link"
:href="`/sdk/download-experiment-dir/${encodeURIComponent(
experimentId
)}/?path=${data.item.path}`"
>
Download Zip
<i class="fa fa-file-archive" aria-hidden="true"></i>
</b-link>
</template>
</b-table>
</div>
</template>
<script>
import StoragePathBreadcrumb from "./StoragePathBreadcrumb.vue";
import { components } from "django-airavata-common-ui";
export default {
name: "experiment-storage-path-viewer",
props: {
experimentStoragePath: {
required: true,
},
downloadInNewWindow: {
type: Boolean,
default: false,
},
experimentId: {
required: true,
},
},
components: {
"human-date": components.HumanDate,
StoragePathBreadcrumb,
},
computed: {
fields() {
return [
{
label: "Name",
key: "name",
sortable: true,
},
{
label: "Size",
key: "size",
sortable: true,
formatter: (value) => this.getFormattedSize(value),
},
{
label: "Last Modified",
key: "modifiedTimestamp",
sortable: true,
},
{
label: "Actions",
key: "actions",
},
];
},
items() {
if (this.experimentStoragePath) {
const dirs = this.experimentStoragePath.directories
.filter((d) => !d.hidden)
.map((d) => {
return {
name: d.name,
path: d.path,
type: "dir",
modifiedTime: d.modifiedTime,
modifiedTimestamp: d.modifiedTime.getTime(), // for sorting
size: d.size,
};
});
const files = this.experimentStoragePath.files.map((f) => {
return {
name: f.name,
mimeType: f.mimeType,
type: "file",
dataProductURI: f.dataProductURI,
downloadURL: f.downloadURL,
modifiedTime: f.modifiedTime,
modifiedTimestamp: f.modifiedTime.getTime(), // for sorting
size: f.size,
};
});
return dirs.concat(files);
} else {
return [];
}
},
downloadTarget() {
return this.downloadInNewWindow ? "_blank" : "_self";
},
},
methods: {
getFormattedSize(size) {
if (size > Math.pow(2, 30)) {
return Math.round(size / Math.pow(2, 30)) + " GB";
} else if (size > Math.pow(2, 20)) {
return Math.round(size / Math.pow(2, 20)) + " MB";
} else if (size > Math.pow(2, 10)) {
return Math.round(size / Math.pow(2, 10)) + " KB";
} else {
return size + " bytes";
}
},
directorySelected(item) {
this.$emit("directory-selected", item.path);
},
},
};
</script>