From 9af8b734f17df28fb18e1dbede5a0642647e1f85 Mon Sep 17 00:00:00 2001 From: ThaumRystra Date: Mon, 2 Sep 2024 20:56:10 +0200 Subject: [PATCH] Finished MVP of user file upload --- .../userImages/methods/removeUserImage.ts | 4 +- .../client/ui/components/ImageUploadInput.vue | 10 +- .../ui/components/global/SmartImageInput.vue | 19 ++-- app/imports/client/ui/files/UserImageCard.vue | 60 ----------- .../ui/files/userImages/ImageInputDialog.vue | 6 +- .../files/userImages/ImagePreviewDialog.vue | 18 +++- .../ui/files/userImages/UserImageCard.vue | 100 ++++++++++++++++++ app/imports/client/ui/pages/Files.vue | 64 +++++++---- app/imports/server/publications/userImages.js | 6 ++ 9 files changed, 192 insertions(+), 95 deletions(-) delete mode 100644 app/imports/client/ui/files/UserImageCard.vue create mode 100644 app/imports/client/ui/files/userImages/UserImageCard.vue diff --git a/app/imports/api/files/userImages/methods/removeUserImage.ts b/app/imports/api/files/userImages/methods/removeUserImage.ts index a3efbf16..e81b4b11 100644 --- a/app/imports/api/files/userImages/methods/removeUserImage.ts +++ b/app/imports/api/files/userImages/methods/removeUserImage.ts @@ -4,7 +4,7 @@ import { RateLimiterMixin } from 'ddp-rate-limiter-mixin'; import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed'; import UserImages from '/imports/api/files/userImages/UserImages'; -const removeArchiveCreature = new ValidatedMethod({ +const removeUserImage = new ValidatedMethod({ name: 'userImages.methods.remove', validate: new SimpleSchema({ 'fileId': { @@ -41,4 +41,4 @@ const removeArchiveCreature = new ValidatedMethod({ }, }); -export default removeArchiveCreature; +export default removeUserImage; diff --git a/app/imports/client/ui/components/ImageUploadInput.vue b/app/imports/client/ui/components/ImageUploadInput.vue index c111d7a5..5d2b0b98 100644 --- a/app/imports/client/ui/components/ImageUploadInput.vue +++ b/app/imports/client/ui/components/ImageUploadInput.vue @@ -1,7 +1,7 @@ - - diff --git a/app/imports/client/ui/files/userImages/ImageInputDialog.vue b/app/imports/client/ui/files/userImages/ImageInputDialog.vue index 7e2af7b9..3b09400d 100644 --- a/app/imports/client/ui/files/userImages/ImageInputDialog.vue +++ b/app/imports/client/ui/files/userImages/ImageInputDialog.vue @@ -123,7 +123,11 @@ export default { { userId, }, { - sort: {'size': -1}, + sort: { + 'meta.createdAt': -1, + 'name': 1, + 'size': -1, + }, } ).map(f => { f.size = prettyBytes(f.size); diff --git a/app/imports/client/ui/files/userImages/ImagePreviewDialog.vue b/app/imports/client/ui/files/userImages/ImagePreviewDialog.vue index 7ca9870e..bc75b65d 100644 --- a/app/imports/client/ui/files/userImages/ImagePreviewDialog.vue +++ b/app/imports/client/ui/files/userImages/ImagePreviewDialog.vue @@ -1,6 +1,7 @@ @@ -118,7 +132,7 @@ import prettyBytes from 'pretty-bytes'; import ArchiveFileCard from '/imports/client/ui/files/ArchiveFileCard.vue'; import FileStorageStats from '/imports/client/ui/files/FileStorageStats.vue'; import ImageUploadInput from '/imports/client/ui/components/ImageUploadInput.vue'; -import UserImageCard from '/imports/client/ui/files/UserImageCard.vue'; +import UserImageCard from '/imports/client/ui/files/userImages/UserImageCard.vue'; import { snackbar } from '/imports/client/ui/components/snackbars/SnackbarQueue'; import { archiveSchema } from '/imports/api/creature/archive/ArchiveCreatureFiles'; import migrateArchive from '/imports/migrations/archive/migrateArchive'; @@ -133,7 +147,8 @@ export default { components: { ArchiveFileCard, FileStorageStats, - SmartImageInput, + UserImageCard, + ImageUploadInput, }, data(){ return { updateStorageUsedLoading: false, @@ -164,6 +179,24 @@ export default { return f; }); }, + imageFiles() { + const userId = Meteor.userId(); + return UserImages.find( + { + userId, + }, { + sort: { + 'meta.createdAt': -1, + 'name': 1, + 'size': -1, + }, + } + ).map(f => { + f.size = prettyBytes(f.size); + f.link = UserImages.link(f); + return f; + }); + }, }, watch: { archiveUploadInProgress(val){ @@ -231,18 +264,14 @@ export default { // These are the event functions, don't need most of them, it shows where we are in the process uploadInstance.on('start', function () { - console.log('Starting'); self.archiveUploadIndeterminate = false; }); uploadInstance.on('end', function (error, fileObj) { - console.log('On end File Object: ', fileObj); self.archiveUploadInProgress = false; }); uploadInstance.on('uploaded', function (error, fileObj) { - console.log('uploaded: ', fileObj); - // Remove the file from the input box self.file = undefined; @@ -251,7 +280,6 @@ export default { }); uploadInstance.on('error', function (error, fileObj) { - console.log('Error during upload: ' + error, fileObj) const text = error.reason || error.message || error; snackbar({text}); self.archiveFileError = text; @@ -259,12 +287,10 @@ export default { }); uploadInstance.on('progress', function (progress, fileObj) { - console.log('Upload Percentage: ' + progress, fileObj) - // Update our progress bar self.archiveUploadProgress = progress; }); - uploadInstance.start(); // Must manually start the upload + uploadInstance.start(); }); fr.readAsText(file); diff --git a/app/imports/server/publications/userImages.js b/app/imports/server/publications/userImages.js index a50b44b2..60616a1e 100644 --- a/app/imports/server/publications/userImages.js +++ b/app/imports/server/publications/userImages.js @@ -3,5 +3,11 @@ import UserImages from '/imports/api/files/userImages/UserImages'; Meteor.publish('userImages', function () { return UserImages.find({ userId: this.userId, + }, { + sort: { + 'meta.createdAt': -1, + 'name': 1, + 'size': -1, + }, }).cursor; });