From 09fe89342565e37ca06fda23eb3b5c8f6710eb76 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Wed, 6 Aug 2025 16:02:09 +0100 Subject: [PATCH] Improved file dropzones --- .../viewer/anchored-point/NewThread.vue | 47 ++++++++-- .../viewer/anchored-point/thread/NewReply.vue | 87 +++++++++++++------ .../components/viewer/comments/Editor.vue | 8 +- 3 files changed, 106 insertions(+), 36 deletions(-) diff --git a/packages/frontend-2/components/viewer/anchored-point/NewThread.vue b/packages/frontend-2/components/viewer/anchored-point/NewThread.vue index 86e7017ec..ac723109c 100644 --- a/packages/frontend-2/components/viewer/anchored-point/NewThread.vue +++ b/packages/frontend-2/components/viewer/anchored-point/NewThread.vue @@ -30,18 +30,30 @@ -
-
+
-
+ @@ -84,6 +96,10 @@ import { import { useMixpanel } from '~~/lib/core/composables/mp' import { useThreadUtilities, useSelectionUtilities } from '~~/lib/viewer/composables/ui' import { useEmbed } from '~/lib/viewer/composables/setup/embed' +import { useServerFileUploadLimit } from '~~/lib/common/composables/serverInfo' +import { UniqueFileTypeSpecifier } from '~~/lib/core/helpers/file' +import { acceptedFileExtensions } from '@speckle/shared/blobs' +import type { UploadableFileItem } from '@speckle/ui-components' const { isEnabled: isEmbedEnabled } = useEmbed() @@ -101,12 +117,29 @@ const props = defineProps<{ const { onKeyDownHandler, updateIsTyping, pauseAutomaticUpdates } = useIsTypingUpdateEmitter() const { closeAllThreads, open } = useThreadUtilities() +const { maxSizeInBytes } = useServerFileUploadLimit() -const editor = ref(null as Nullable<{ openFilePicker: () => void }>) +const editor = ref( + null as Nullable<{ + openFilePicker: () => void + onFilesSelected: (payload: { files: UploadableFileItem[] }) => void + }> +) +const uploadZone = ref(null as Nullable<{ triggerPicker: () => void }>) const commentValue = ref({ doc: undefined, attachments: undefined }) const threadContainer = ref(null as Nullable) const isPostingNewThread = ref(false) +const acceptValue = [ + UniqueFileTypeSpecifier.AnyImage, + UniqueFileTypeSpecifier.AnyVideo, + ...acceptedFileExtensions.map((fileExtension) => `.${fileExtension}`) +].join(',') + +const onFilesSelected = (payload: { files: UploadableFileItem[] }) => { + editor.value?.onFilesSelected(payload) +} + // const { style } = useExpandedThreadResponsiveLocation({ // threadContainer, // width: 320 @@ -174,7 +207,7 @@ const onSubmit = (comment?: CommentEditorValue) => { } const trackAttachAndOpenFilePicker = () => { - editor.value?.openFilePicker() + uploadZone.value?.triggerPicker() mp.track('Comment Action', { type: 'action', name: 'attach' }) } diff --git a/packages/frontend-2/components/viewer/anchored-point/thread/NewReply.vue b/packages/frontend-2/components/viewer/anchored-point/thread/NewReply.vue index 0af0a0417..0b835f2a2 100644 --- a/packages/frontend-2/components/viewer/anchored-point/thread/NewReply.vue +++ b/packages/frontend-2/components/viewer/anchored-point/thread/NewReply.vue @@ -1,32 +1,46 @@