Select Git revision
-
Sachin Prakash authoredSachin Prakash authored
FileSharing.vue 12.35 KiB
<template>
<div id="FileSharing">
<!-- breadcrumb -->
<nav class="text-sm font-semibold mb-6" aria-label="Breadcrumb">
<ol class="list-none p-0 inline-flex">
<li class="flex items-center text-blue-500">
<a href="#" class="text-gray-700">Main</a>
<svg class="fill-current w-3 h-3 mx-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg>
</li>
<li class="flex items-center">
<a href="#" class="text-gray-600">WAMPAC Drive</a>
</li>
</ol>
</nav>
<!-- breadcrumb end -->
<div class="flex flex-wrap -mx-3 mb-5">
<div class="w-1/4 l:w-1/4 px-3">
<div class="w-full bg-white border text-blue-400 rounded-lg flex items-center p-6 mb-6 xl:mb-0">
<svg class="w-16 h-16 fill-current mr-4 hidden lg:block" viewBox="0 0 20 20">
<path d="M14.999,8.543c0,0.229-0.188,0.417-0.416,0.417H5.417C5.187,8.959,5,8.772,5,8.543s0.188-0.417,0.417-0.417h9.167C14.812,8.126,14.999,8.314,14.999,8.543 M12.037,10.213H5.417C5.187,10.213,5,10.4,5,10.63c0,0.229,0.188,0.416,0.417,0.416h6.621c0.229,0,0.416-0.188,0.416-0.416C12.453,10.4,12.266,10.213,12.037,10.213 M14.583,6.046H5.417C5.187,6.046,5,6.233,5,6.463c0,0.229,0.188,0.417,0.417,0.417h9.167c0.229,0,0.416-0.188,0.416-0.417C14.999,6.233,14.812,6.046,14.583,6.046 M17.916,3.542v10c0,0.229-0.188,0.417-0.417,0.417H9.373l-2.829,2.796c-0.117,0.116-0.71,0.297-0.71-0.296v-2.5H2.5c-0.229,0-0.417-0.188-0.417-0.417v-10c0-0.229,0.188-0.417,0.417-0.417h15C17.729,3.126,17.916,3.313,17.916,3.542 M17.083,3.959H2.917v9.167H6.25c0.229,0,0.417,0.187,0.417,0.416v1.919l2.242-2.215c0.079-0.077,0.184-0.12,0.294-0.12h7.881V3.959z"></path>
</svg>
<div class="text-gray-700">
<p class="font-semibold text-3xl">{{TokenCount}}</p>
<p>Token Balance <span class="px-2"></span></p>
</div>
</div>
</div>
</div>
<div class="lg:flex justify-between items-center mb-6">
<p class="text-2xl font-semibold mb-2 lg:mb-0">WAMPAC Drive -<span>
<li class="border-blue-400 bg-blue-400 rounded-full inline-block -ml-3">
<router-link to="" class="text-m rounded-full h-8 w-8 flex items-center justify-center overflow-hidden text-white">
{{filesShared}}
</router-link>
</li>
</span>
</p>
<router-link to="/dashboard/upload-file"><button class="bg-blue-500 hover:bg-blue-600 focus:outline-none rounded-lg px-6 py-2 text-white font-semibold shadow">Create New Contract</button></router-link>
</div>
<p>Update any files shared with other nodes in the network. </p>
<br>
<p v-if="filesShared==0">No Shared Files</p>
<div v-if="filesShared!=0" class="lg:flex justify-between items-center mb-6">
<table class="tables table-fixed">
<thead>
<tr>
<th class="w-1/4 ...">File Name</th>
<th class="w-1/4 ..."></th>
<th class="w-1/4 ..."></th>
</tr>
</thead>
<tbody>
<tr class="bg-blue-100" v-for="fileList in fileList" :key="fileList">
<td>{{ fileList }} </td>
<td> <button v-on:click="detailsPopup(fileList)" class="bg-blue-100 hover:bg-blue-500 focus:outline-none rounded-sm px-6 py-2 text-black font-semibold shadow">Details</button> </td>
<td> <button v-on:click="toggleUpdate(fileList)" class="bg-blue-100 hover:bg-blue-500 focus:outline-none rounded-sm px-6 py-2 text-black font-semibold shadow">Update</button> </td>
</tr>
</tbody>
</table>
</div>
<modal name="file-update-modal">
<div v-if=showPopup class="w-full bg-white border rounded-lg p-4">
<p class="text-l font-semibold mb-4">File Token:
<span class="text-sm font-normal mb-4">{{fileUpdate.fileHash}}</span></p>
<p class="text-l font-semibold mb-4">Current Hash:
<span class="text-sm font-normal mb-4">{{fileUpdate.token}}</span> </p>
<div class="w-full xl:w-1/2 px-3">
<input type="file" id="file" ref="file" v-on:change="handleFileUpload()"/>
<span class="p-40" v-if="showUpdating">
<Progress strokeColor="#516091" value="87">
<template v-slot:footer>
<b>Updating Selected File, Please wait..</b>
</template>
</Progress>
</span>
</div>
</div>
<div v-if="!showUpdating && showPopup" class="w-full xl:w-1/2 px-3 py-10">
<button v-on:click="launchFileContract(fileUpdate.token), fetchingStats = true" class="center bg-blue-500 hover:bg-blue-600 focus:outline-none rounded-sm px-2 py-2 text-white font-semibold shadow">Update</button>
</div>
<div class="py-20">
<p class="text-gray-700 font-semibold text-xl center">{{updateResponse}}</p>
</div>
</modal>
<modal name="file-info-modal">
<div class="w-full bg-white border rounded-lg p-4">
<p class="text-gray-700 font-semibold text-3xl">{{fileDetail.fileName}}</p>
<p class="text-gray-700 font-semibold text-sm">Token: {{fileDetail.token }}</p>
<p class="text-gray-700 font-semibold text-sm">File Hash: {{fileDetail.fileHash }}</p>
<p class="text-gray-700 font-semibold text-sm">Status: {{fileDetail.status }}</p>
<p class="text-black-700 font-semibold text-l">Contract Data</p>
<div class="w-full bg-white border rounded-lg p-4">
<div class="w-full bg-gray-100 border rounded-lg flex justify-between items-center px-1 py-2">
<div>
<ul>
<li v-for="data in fileDetail.contractData" :key="data">
<div class="did font-semibold text-xs"><span class="text-black-500 font-normal text-xs"> {{data.did}}</span> {{ data.ip }} <span class="text-red-500 font-semibold text-sm"> {{ data.writeCount }}</span></div>
<hr>
</li>
</ul>
</div>
</div>
</div>
<p class="text-blue-700 font-semibold text-xl">You accessed this file {{fileDetail.accessCount }} times</p>
</div>
</modal>
</div>
</template>
<script>
import Vue from 'vue'
import axios from 'axios'
import VModal from 'vue-js-modal'
import Progress from 'easy-circular-progress'
Vue.use(VModal, {
dynamicDefaults: {
draggable: true,
resizable: true,
height: 'auto'
}
})
export default {
name: 'FileSharing',
data() {
return {
filesShared: 0,
TokenCount: 0,
open: false,
fileToken: "",
fileDetail: {},
fileUpdate: {},
showPopup: false,
showUpdating: false,
fileList: [],
updateResponse: '',
newFile: {}
}
},
components: {
Progress
},
methods: {
getTokenCount: function () {
console.log("loading contactsOnline")
axios.get('http://localhost:1898/getTokenCount')
.then((response) => {
this.TokenCount = response.data.data
})
.catch(function (error) {
console.log(error);
});
},
thumbUrlOld (file) {
return file.myThumbUrlProperty
},
thumbUrlNew (file) {
return file.myThumbUrlProperty
},
// onChangeNew (file) {
// console.log('New File selected!')
// if (file) {
// this.newFile = file
// console.log("uploading file")
// } else {
// console.log('FileReader API not supported: use the <form>, please!')
// }
// },
handleFileUpload(){
this.newFile = this.$refs.file.files[0];
},
detailsPopup: function (token) {
this.$modal.show('file-info-modal');
this.open = true
console.log(token)
const formData = new FormData()
formData.append('fileName', token)
console.log("loading file details")
axios.post('http://localhost:1898/getSharedFileDetails', formData,{
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((response) => {
console.log(response);
this.fileDetail = response.data.data.response
console.log("printing result")
console.log(this.fileDetail.Status)
})
.catch(function (error) {
console.log(error);
});
},
toggleUpdate: function (token) {
this.updateResponse = ''
this.showUpdating = false
this.$modal.show('file-update-modal');
this.showPopup = true
this.fileToken = token
// if(token == 'close'){
// this.showPopup = !this.showPopup
// }
console.log(token)
const formData = new FormData()
formData.append('fileName', token)
axios.post('http://localhost:1898/getSharedFileMetaData', formData,{
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((response) => {
console.log(response);
this.fileUpdate = response.data.data.response
// this.$modal.hide('file-update-modal');
})
.catch(function (error) {
console.log(error);
});
},
launchFileContract: function (token) {
// this.open = false
this.showUpdating = true
this.updateResponse = ''
const formData = new FormData()
formData.append('newfile', this.newFile)
formData.append('token', token)
console.log("loading launchFileContract")
axios.post('http://localhost:1898/update', formData,{
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((response) => {
this.showUpdating = false
this.updateResponse = response.data.data.response
this.newFile = ''
this.showPopup = false
// this.open = false
console.log(this.responseDID)
// TODO: GOTO HOME AND SHOW LOADER
})
.catch(function (error) {
console.log(error);
});
},
checkStatus: function () {
console.log("loading DID exists")
axios.get('http://localhost:1898/checkDidExists')
.then((response) => {
console.log(response);
if(response.data.data.payload == 'Failure'){
console.log("moving to create DID")
this.$router.push({path: '/create-new-DID'})
return;
} else {
console.log("loading DID verified")
axios.get('http://localhost:1898/checkDidVerified')
.then((response) => {
this.isVerified = response.data.data.payload
console.log(response);
if(response.data.data.payload == 'Failure'){
console.log("moving to create DID [check]")
this.$router.push({path: '/verification'})
return;
}
})
.catch(function (error) {
console.log(error);
this.$router.push({path: '/verification'})
return;
});
}
})
.catch(function (error) {
console.log(error);
this.$router.push({path: '/create-new-DID'})
return;
});
axios.get('http://localhost:1898/checkRole')
.then((response) => {
console.log(response);
// this.myRole = response.data.data.payload
})
.catch(function (error) {
console.log(error);
// this.$router.push({path: '/create-new-DID'})
});
},
getFiles: function () {
console.log("loading list of Files")
axios.get('http://localhost:1898/getSharedFiles')
.then((response) => {
this.fileList = response.data.data.response
this.filesShared = response.data.data.response.length
})
.catch(function (error) {
console.log(error);
});
},
getToken: function () {
axios.get('http://localhost:1898/requestTokens')
.then((response) => {
if(response.data.data.payload == 'Failure') {
this.$router.push({path: '/dashboard/home'})
}
})
.catch(function (error) {
console.log(error);
});
},
},
beforeMount() {
this.getToken()
this.checkStatus()
this.getFiles()
this.getTokenCount()
}
}
</script>
<style>
.center{
text-align: center;
}
.modalBefore {
top:-300px;
margin:auto;
}
.modalAfter {
top:200px;
}
</style>