project-data-add-window.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <div class="project-data-add-window">
  3. <!-- TODO use valid url -->
  4. <file-input :socket="socket" :name="'/projects/' + currentProject.id + '/data'"></file-input>
  5. <template v-if="uploads.length > 0">
  6. <h1>Uploads</h1>
  7. <div class="uploads">
  8. <template v-for="up in uploads">
  9. <div :key="up.id + '-div'">{{ up.filename }}</div>
  10. <progress-bar :key="up.id + '-progress'" :progress="up.progress"></progress-bar>
  11. </template>
  12. </div>
  13. </template>
  14. </div>
  15. </template>
  16. <script>
  17. import FileInput from "@/components/base/file-input";
  18. import ProgressBar from "@/components/base/progress-bar";
  19. export default {
  20. name: "project-data-add-window",
  21. components: {ProgressBar, FileInput},
  22. props: ['socket', 'currentProject'],
  23. computed: {
  24. uploads: function() {
  25. const filtered = Object.keys(this.currentProject.jobs)
  26. .map(e => this.currentProject.jobs[e])
  27. .filter(e => e.type === 'upload');
  28. filtered.sort(this.sortUploads);
  29. return filtered;
  30. }
  31. },
  32. methods: {
  33. sortUploads: function(u, v) {
  34. if (u.created < v.created)
  35. return 1;
  36. else
  37. return -1;
  38. }
  39. }
  40. }
  41. </script>
  42. <style scoped>
  43. .project-data-add-window {
  44. padding: 1rem;
  45. }
  46. h1 {
  47. margin-bottom: 1rem;
  48. }
  49. .uploads {
  50. display: grid;
  51. grid-template-columns: auto 1fr;
  52. }
  53. .progress-bar {
  54. margin-left: 1rem;
  55. }
  56. </style>