From 01ea0399cb3c1e0e95f9d896edd6a72e1ae88e04 Mon Sep 17 00:00:00 2001 From: mmelko Date: Wed, 28 Jun 2023 08:54:05 +0200 Subject: [PATCH] refactor(camel-plugin): Separate component with input and suggestions to the standalone component --- .../camel/endpoints/BrowseMessages.tsx | 76 ++---------------- .../camel/endpoints/InputWithSuggestions.tsx | 78 +++++++++++++++++++ 2 files changed, 83 insertions(+), 71 deletions(-) create mode 100644 packages/hawtio/src/plugins/camel/endpoints/InputWithSuggestions.tsx diff --git a/packages/hawtio/src/plugins/camel/endpoints/BrowseMessages.tsx b/packages/hawtio/src/plugins/camel/endpoints/BrowseMessages.tsx index 424fb7df..f73e13df 100644 --- a/packages/hawtio/src/plugins/camel/endpoints/BrowseMessages.tsx +++ b/packages/hawtio/src/plugins/camel/endpoints/BrowseMessages.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useEffect, useRef, useState } from 'react' +import React, { useContext, useEffect, useState } from 'react' import { CamelContext } from '@hawtiosrc/plugins/camel/context' import { Bullseye, @@ -11,16 +11,11 @@ import { Flex, FlexItem, FormGroup, - Menu, - MenuContent, - MenuItem, - MenuList, Modal, ModalVariant, PageSection, Pagination, SearchInput, - Text, TextInput, Title, Toolbar, @@ -40,81 +35,19 @@ import { import { eventService, NotificationType } from '@hawtiosrc/core' import { Position } from 'reactflow' import { MBeanNode } from '@hawtiosrc/plugins' - +import { InputWithSuggestions } from './InputWithSuggestions' const ForwardMessagesComponent: React.FunctionComponent<{ onForwardMessages: (uri: string, message?: MessageData) => void currentMessage?: MessageData endpoints: string[] }> = ({ onForwardMessages, currentMessage, endpoints }) => { const [uri, setUri] = useState('') - const [menuIsOpen, setMenuIsOpen] = React.useState(false) - const suggestionsRef = useRef(null) - - const handleOutsideClick = (event: MouseEvent) => { - if (suggestionsRef.current && !(suggestionsRef.current as HTMLElement).contains(event.target as Node)) { - setMenuIsOpen(false) - } - } - - useEffect(() => { - document.addEventListener('mousedown', handleOutsideClick) - return () => { - document.removeEventListener('mousedown', handleOutsideClick) - } - }, []) - - const onSelect = (event: React.MouseEvent | undefined, itemId: string | number | undefined) => { - const selectedText = (event?.target as HTMLElement).innerText - setUri(selectedText) - setMenuIsOpen(false) - event?.stopPropagation() - } - - const suggestionsList = endpoints - ?.filter(e => e.includes(uri)) - .map((e, index) => { - const suggestion = - uri !== '' - ? e - .split(new RegExp(`(${uri})`, 'gi')) - .map((part, i) => - part.toLowerCase() === uri.toLowerCase() ? {part} : part, - ) - : e - - return ( - - {suggestion} - - ) - }) - - const suggestions = ( -
- setMenuIsOpen(false)} - > - - {suggestionsList} - - -
- ) return ( - - setMenuIsOpen(true)} - placeholder='uri' - aria-label='Search input' - /> - {suggestionsList.length > 0 && menuIsOpen && suggestions} + +