diff --git a/web/app/components/workflow/skill/editor/skill-editor/plugins/file-picker-block.tsx b/web/app/components/workflow/skill/editor/skill-editor/plugins/file-picker-block.tsx index 354fcba01ec..dc07bef1696 100644 --- a/web/app/components/workflow/skill/editor/skill-editor/plugins/file-picker-block.tsx +++ b/web/app/components/workflow/skill/editor/skill-editor/plugins/file-picker-block.tsx @@ -1,21 +1,17 @@ import type { LexicalNode } from 'lexical' -import type { Dispatch, SetStateAction } from 'react' -import { - flip, - offset, - shift, - useFloating, -} from '@floating-ui/react' import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' import { LexicalTypeaheadMenuPlugin, MenuOption } from '@lexical/react/LexicalTypeaheadMenuPlugin' import { $insertNodes, } from 'lexical' import * as React from 'react' -import { useCallback, useLayoutEffect, useMemo } from 'react' -import ReactDOM from 'react-dom' +import { useCallback, useMemo } from 'react' import { useBasicTypeaheadTriggerMatch } from '@/app/components/base/prompt-editor/hooks' import { $splitNodeContainingQuery } from '@/app/components/base/prompt-editor/utils' +import { + Popover, + PopoverContent, +} from '@/app/components/base/ui/popover' import { FilePickerPanel } from './file-picker-panel' import { $createFileReferenceNode } from './file-reference-block/node' @@ -25,29 +21,8 @@ class FilePickerMenuOption extends MenuOption { } } -type ReferenceSyncProps = { - anchor: HTMLElement | null - setReference: Dispatch> | ((node: HTMLElement | null) => void) -} - -const ReferenceSync = ({ anchor, setReference }: ReferenceSyncProps) => { - useLayoutEffect(() => { - setReference(anchor) - }, [anchor, setReference]) - - return null -} - const FilePickerBlock = () => { const [editor] = useLexicalComposerContext() - const { refs, floatingStyles, isPositioned } = useFloating({ - placement: 'bottom-start', - middleware: [ - offset(0), - shift({ padding: 8 }), - flip(), - ], - }) const checkForTriggerMatch = useBasicTypeaheadTriggerMatch('/', { minLength: 0, maxLength: 0, @@ -76,16 +51,20 @@ const FilePickerBlock = () => { const closeMenu = () => selectOptionAndCleanUp(options[0]) - return ReactDOM.createPortal( - <> - -
{ + if (!open) + closeMenu() + }} + > + { @@ -93,11 +72,10 @@ const FilePickerBlock = () => { closeMenu() }} /> -
- , - anchorElementRef.current, + + ) - }, [floatingStyles, insertFileReference, isPositioned, options, refs]) + }, [insertFileReference, options]) return (