diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx index 78b192c79f59..79d58788518a 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx @@ -15,9 +15,10 @@ const StyledHeader = styled.li` border-top-right-radius: ${({ theme }) => theme.border.radius.sm}; border-bottom: 1px solid ${({ theme }) => theme.border.color.light}; - padding: ${({ theme }) => theme.spacing(1)}; + padding: ${({ theme }) => theme.spacing(1)} 0; user-select: none; + width: inherit; &:hover { background: ${({ theme, onClick }) => diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/StyledDropdownButtonContainer.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/StyledDropdownButtonContainer.tsx index c65335131248..1563b7c70420 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/StyledDropdownButtonContainer.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/StyledDropdownButtonContainer.tsx @@ -3,12 +3,17 @@ import styled from '@emotion/styled'; type StyledDropdownButtonProps = { isUnfolded: boolean; isActive?: boolean; + transparentBackground?: boolean; }; export const StyledDropdownButtonContainer = styled.div` align-items: center; - background: ${({ theme, isUnfolded }) => - isUnfolded ? theme.background.transparent.light : theme.background.primary}; + background: ${({ theme, isUnfolded, transparentBackground }) => + transparentBackground + ? 'none' + : isUnfolded + ? theme.background.transparent.light + : theme.background.primary}; border-radius: ${({ theme }) => theme.border.radius.sm}; color: ${({ isActive, theme }) => isActive ? theme.color.blue : theme.font.color.secondary}; @@ -22,9 +27,11 @@ export const StyledDropdownButtonContainer = styled.div - isUnfolded - ? theme.background.transparent.medium - : theme.background.transparent.light}; + background: ${({ theme, isUnfolded, transparentBackground }) => + transparentBackground + ? 'transparent' + : isUnfolded + ? theme.background.transparent.medium + : theme.background.transparent.light}; } `; diff --git a/packages/twenty-front/src/modules/workflow/search-variables/components/SearchVariablesDropdown.tsx b/packages/twenty-front/src/modules/workflow/search-variables/components/SearchVariablesDropdown.tsx index ee6b48745c9f..c79d77976477 100644 --- a/packages/twenty-front/src/modules/workflow/search-variables/components/SearchVariablesDropdown.tsx +++ b/packages/twenty-front/src/modules/workflow/search-variables/components/SearchVariablesDropdown.tsx @@ -11,15 +11,17 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { Editor } from '@tiptap/react'; import { useState } from 'react'; -import { IconVariable } from 'twenty-ui'; +import { IconVariablePlus } from 'twenty-ui'; const StyledDropdownVariableButtonContainer = styled( StyledDropdownButtonContainer, -)` - background-color: ${({ theme }) => theme.background.transparent.lighter}; +)<{ transparentBackground?: boolean }>` + background-color: ${({ theme, transparentBackground }) => + transparentBackground + ? 'transparent' + : theme.background.transparent.lighter}; color: ${({ theme }) => theme.font.color.tertiary}; - padding: ${({ theme }) => theme.spacing(0)}; - margin: ${({ theme }) => theme.spacing(2)}; + padding: ${({ theme }) => theme.spacing(2)}; `; const SearchVariablesDropdown = ({ @@ -65,12 +67,15 @@ const SearchVariablesDropdown = ({ scope: dropdownId, }} clickableComponent={ - - + + } dropdownComponents={ - + {selectedStep ? ( { const [currentPath, setCurrentPath] = useState([]); + const [searchInputValue, setSearchInputValue] = useState(''); const getSelectedObject = () => { let selected = step.outputSchema; @@ -30,6 +32,7 @@ const SearchVariablesDropdownStepSubItem = ({ if (isObject(selectedObject[key])) { setCurrentPath([...currentPath, key]); + setSearchInputValue(''); } else { onSelect(`{{${step.id}.${[...currentPath, key].join('.')}}}`); } @@ -45,12 +48,25 @@ const SearchVariablesDropdownStepSubItem = ({ const headerLabel = currentPath.length === 0 ? step.name : currentPath.at(-1); + const options = Object.entries(getSelectedObject()); + + const filteredOptions = searchInputValue + ? options.filter(([key]) => + key.toLowerCase().includes(searchInputValue.toLowerCase()), + ) + : options; + return ( <> {headerLabel} - {Object.entries(getSelectedObject()).map(([key, value]) => ( + setSearchInputValue(event.target.value)} + /> + {filteredOptions.map(([key, value]) => (