import * as React from 'react'; import { styled } from '@mui/material/styles'; import Button from '@mui/material/Button'; import List from '@mui/material/List'; import ListItemButton from '@mui/material/ListItemButton'; import MuiListItemText from '@mui/material/ListItemText'; import Paper from '@mui/material/Paper'; import Collapse from '@mui/material/Collapse'; import Typography from '@mui/material/Typography'; import ExpandLess from '@mui/icons-material/ExpandLess'; import ExpandMore from '@mui/icons-material/ExpandMore'; import type { IStep } from '@automatisch/types'; const ListItemText = styled(MuiListItemText)``; type SuggestionsProps = { query?: string | null; index: number; data: any; onSuggestionClick: (variable: any) => void; }; const SHORT_LIST_LENGTH = 4; const LIST_HEIGHT = 256; const getPartialFilteredArray = (array: any[], query = '', length = array.length) => { return array .filter((suboption: any) => suboption.name.includes(query)) .slice(0, length); } const Suggestions = (props: SuggestionsProps) => { const { query = '', index: focusIndex, data, onSuggestionClick = () => null, } = props; const [current, setCurrent] = React.useState(0); const [listLength, setListLength] = React.useState(SHORT_LIST_LENGTH); const expandList = () => { setListLength(undefined); }; const collapseList = () => { setListLength(SHORT_LIST_LENGTH); } React.useEffect(() => { setListLength(SHORT_LIST_LENGTH); }, [current]) return ( Variables {data.map((option: IStep, index: number) => ( <> setCurrent((currentIndex) => currentIndex === index ? null : index)} sx={{ py: 0.5, }} > {option.output?.length && ( current === index ? : )} {getPartialFilteredArray(option.output as any || [], query as string, listLength) .map((suboption: any, index: number) => ( onSuggestionClick(suboption)} selected={focusIndex === index}> )) } {listLength && ( )} {listLength === undefined && ( )} ))} ); } export default Suggestions;