From f48c3f958252283d000300fc38932cc5efca243c Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Wed, 26 Oct 2022 00:35:50 +0530 Subject: [PATCH] feat: add "Upload and link file" button to linking panel --- .../FileView/FileViewWithoutProtection.tsx | 1 + .../LinkedItems/LinkedItemsButton.tsx | 5 +- .../LinkedItems/LinkedItemsPanel.tsx | 48 ++++++++++++++++++- .../Components/NoteView/NoteView.tsx | 1 + 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx b/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx index 131a4f407..565bfa9de 100644 --- a/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx +++ b/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx @@ -94,6 +94,7 @@ const FileViewWithoutProtection = ({ application, viewControllerManager, file }: Promise filesController: FilesController + featuresController: FeaturesController } -const LinkedItemsButton = ({ linkingController, filesController, onClickPreprocessing }: Props) => { +const LinkedItemsButton = ({ linkingController, filesController, onClickPreprocessing, featuresController }: Props) => { const { isLinkingPanelOpen, setIsLinkingPanelOpen } = linkingController const buttonRef = useRef(null) @@ -35,6 +37,7 @@ const LinkedItemsButton = ({ linkingController, filesController, onClickPreproce isOpen={isLinkingPanelOpen} linkingController={linkingController} filesController={filesController} + featuresController={featuresController} /> diff --git a/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx b/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx index ad1967952..637964399 100644 --- a/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx +++ b/packages/web/src/javascripts/Components/LinkedItems/LinkedItemsPanel.tsx @@ -1,3 +1,4 @@ +import { FeaturesController } from '@/Controllers/FeaturesController' import { FilesController } from '@/Controllers/FilesController' import { LinkableItem, LinkingController } from '@/Controllers/LinkingController' import { classNames } from '@/Utils/ConcatenateClassNames' @@ -6,7 +7,7 @@ import { formatSizeToReadableString } from '@standardnotes/filepicker' import { FileItem } from '@standardnotes/snjs' import { KeyboardKey } from '@standardnotes/ui-services' import { observer } from 'mobx-react-lite' -import { useEffect, useRef, useState } from 'react' +import { ChangeEventHandler, useEffect, useRef, useState } from 'react' import { PopoverFileItemActionType } from '../AttachedFilesPopover/PopoverFileItemAction' import ClearInputButton from '../ClearInputButton/ClearInputButton' import Icon from '../Icon/Icon' @@ -158,10 +159,12 @@ const LinkedItemsSectionItem = ({ const LinkedItemsPanel = ({ linkingController, filesController, + featuresController, isOpen, }: { linkingController: LinkingController filesController: FilesController + featuresController: FeaturesController isOpen: boolean }) => { const { @@ -181,6 +184,9 @@ const LinkedItemsPanel = ({ isEntitledToNoteLinking, } = linkingController + const { hasFiles } = featuresController + + const fileInputRef = useRef(null) const searchInputRef = useRef(null) const [searchQuery, setSearchQuery] = useState('') const isSearching = !!searchQuery.length @@ -192,6 +198,30 @@ const LinkedItemsPanel = ({ } }, [isOpen]) + const handleFileInputChange: ChangeEventHandler = (event) => { + const files = event.currentTarget.files + + if (!files) { + return + } + + for (let i = 0; i < files.length; i++) { + filesController.uploadNewFile(files[i]).then((uploadedFiles) => { + if (uploadedFiles) { + void linkItemToSelectedItem(uploadedFiles[0]) + } + }) + } + } + + const selectAndUploadFiles = () => { + if (!fileInputRef.current) { + return + } + + fileInputRef.current.click() + } + return (
)} - {!!linkedFiles.length && ( + {(!!linkedFiles.length || hasFiles) && (
Linked Files
+ + {linkedFiles.map((link) => ( { filesController={this.viewControllerManager.filesController} linkingController={this.viewControllerManager.linkingController} onClickPreprocessing={this.ensureNoteIsInsertedBeforeUIAction} + featuresController={this.viewControllerManager.featuresController} />