diff --git a/packages/web/src/javascripts/Application/Dependencies/WebDependencies.ts b/packages/web/src/javascripts/Application/Dependencies/WebDependencies.ts index da93e90f7..15d19a767 100644 --- a/packages/web/src/javascripts/Application/Dependencies/WebDependencies.ts +++ b/packages/web/src/javascripts/Application/Dependencies/WebDependencies.ts @@ -350,6 +350,7 @@ export class WebDependencies extends DependencyContainer { this.get(Web_TYPES.FilePreviewModalController), this.get(Web_TYPES.ArchiveManager), this.get(Web_TYPES.VaultDisplayService), + application.vaults, application.items, application.files, application.mutator, diff --git a/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx b/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx index de2f63fe3..1f57bc820 100644 --- a/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx +++ b/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx @@ -3,7 +3,7 @@ import { usePremiumModal } from '@/Hooks/usePremiumModal' import { classNames } from '@standardnotes/utils' import { isHandlingFileDrag } from '@/Utils/DragTypeCheck' import { StreamingFileReader } from '@standardnotes/filepicker' -import { FileItem } from '@standardnotes/snjs' +import { FileItem, SNNote } from '@standardnotes/snjs' import { useMemo, useState, createContext, ReactNode, useRef, useCallback, useEffect, useContext, memo } from 'react' import Portal from './Portal/Portal' import { ElementIds } from '@/Constants/ElementIDs' @@ -11,6 +11,7 @@ import { ElementIds } from '@/Constants/ElementIDs' type FileDragTargetData = { tooltipText: string callback: (files: FileItem) => void + note?: SNNote } type FileDnDContextData = { @@ -200,15 +201,17 @@ const FileDragNDropProvider = ({ application, children }: Props) => { return } - const uploadedFile = await application.filesController.uploadNewFile(fileOrHandle) + const dragTarget = closestDragTarget ? dragTargets.current.get(closestDragTarget) : undefined + + const uploadedFile = await application.filesController.uploadNewFile(fileOrHandle, { + note: dragTarget?.note, + }) if (!uploadedFile) { return } - if (closestDragTarget && dragTargets.current.has(closestDragTarget)) { - dragTargets.current.get(closestDragTarget)?.callback(uploadedFile) - } + dragTarget?.callback(uploadedFile) }) dragCounter.current = 0 diff --git a/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx b/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx index e766bf8cf..7b4fda5f8 100644 --- a/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx +++ b/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx @@ -9,7 +9,7 @@ import Icon from '../Icon/Icon' import DecoratedInput from '../Input/DecoratedInput' import LinkedItemSearchResults from './LinkedItemSearchResults' import { LinkedItemsSectionItem } from './LinkedItemsSectionItem' -import { DecryptedItem } from '@standardnotes/snjs' +import { DecryptedItem, SNNote } from '@standardnotes/snjs' import { useItemLinks } from '@/Hooks/useItemLinks' import { mergeRefs } from '@/Hooks/mergeRefs' @@ -41,7 +41,7 @@ const LinkedItemsPanel = ({ item }: { item: DecryptedItem }) => { return } - void application.filesController.selectAndUploadNewFiles((file) => { + void application.filesController.selectAndUploadNewFiles(item instanceof SNNote ? item : undefined, (file) => { void linkItems(item, file) }) } diff --git a/packages/web/src/javascripts/Components/NoteView/NoteViewFileDropTarget.tsx b/packages/web/src/javascripts/Components/NoteView/NoteViewFileDropTarget.tsx index bf70ec7c9..de418a2e3 100644 --- a/packages/web/src/javascripts/Components/NoteView/NoteViewFileDropTarget.tsx +++ b/packages/web/src/javascripts/Components/NoteView/NoteViewFileDropTarget.tsx @@ -29,6 +29,7 @@ const NoteViewFileDropTarget = ({ note, linkingController, noteViewElement, file }) filesController.notifyObserversOfUploadedFileLinkingToCurrentNote(uploadedFile.uuid) }, + note, }) } diff --git a/packages/web/src/javascripts/Controllers/FilesController.ts b/packages/web/src/javascripts/Controllers/FilesController.ts index 24ecec228..82eee7262 100644 --- a/packages/web/src/javascripts/Controllers/FilesController.ts +++ b/packages/web/src/javascripts/Controllers/FilesController.ts @@ -35,7 +35,9 @@ import { MutatorClientInterface, Platform, ProtectionsClientInterface, + SNNote, SyncServiceInterface, + VaultServiceInterface, } from '@standardnotes/snjs' import { addToast, dismissToast, ToastType, updateToast } from '@standardnotes/toast' import { action, makeObservable, observable, reaction } from 'mobx' @@ -80,6 +82,7 @@ export class FilesController extends AbstractViewController void) { + public async selectAndUploadNewFiles(note?: SNNote, callback?: (file: FileItem) => void) { const selectedFiles = await this.reader.selectFiles() selectedFiles.forEach(async (file) => { if (this.alertIfFileExceedsSizeLimit(file)) { return } - const uploadedFile = await this.uploadNewFile(file) + const uploadedFile = await this.uploadNewFile(file, { + note, + }) if (uploadedFile && callback) { callback(uploadedFile) } @@ -385,7 +390,15 @@ export class FilesController extends AbstractViewController { let toastId: string | undefined @@ -407,9 +420,11 @@ export class FilesController extends AbstractViewController