/* eslint-disable */ // @ts-nocheck import { Button, Chip, ChipGroup, MenuFooter, MenuToggle, MenuToggleStatus, Select, SelectList, SelectOptionProps, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from "../../@patternfly/react-core"; import { TimesIcon } from "../../@patternfly/react-icons"; import { Children, useRef, useState } from "react"; import { KeycloakSelectProps, SelectVariant, propertyToString, } from "./KeycloakSelect"; export const TypeaheadSelect = ({ toggleId, onSelect, onToggle, onFilter, variant, validated, placeholderText, maxHeight, width, toggleIcon, direction, selections, typeAheadAriaLabel, chipGroupComponent, chipGroupProps, footer, isDisabled, children, ...rest }: KeycloakSelectProps) => { const [filterValue, setFilterValue] = useState(""); const [focusedItemIndex, setFocusedItemIndex] = useState(0); const textInputRef = useRef(); const childArray = Children.toArray( children, ) as React.ReactElement[]; const visibleChildren = onFilter || !filterValue ? childArray : childArray.filter((child) => { const { children: label, value } = child.props; const text = typeof label === "string" ? label : String(value ?? ""); return text.toLowerCase().includes(filterValue.toLowerCase()); }); const toggle = () => { onToggle(!rest.isOpen); }; const onInputKeyDown = (event: React.KeyboardEvent) => { const focusedItem = visibleChildren.at(focusedItemIndex); onToggle(true); switch (event.key) { case "Enter": { event.preventDefault(); if (!focusedItem) break; if (variant !== SelectVariant.typeaheadMulti) { setFilterValue(String(focusedItem.props.value)); } else { setFilterValue(""); } onSelect?.(focusedItem.props.value); onToggle(false); setFocusedItemIndex(0); break; } case "Escape": { onToggle(false); break; } case "Backspace": { if (variant === SelectVariant.typeahead) { onSelect?.(""); } break; } case "ArrowUp": case "ArrowDown": { event.preventDefault(); if (visibleChildren.length === 0) break; let indexToFocus = 0; if (event.key === "ArrowUp") { if (focusedItemIndex === 0) { indexToFocus = visibleChildren.length - 1; } else { indexToFocus = focusedItemIndex - 1; } } if (event.key === "ArrowDown") { if (focusedItemIndex === visibleChildren.length - 1) { indexToFocus = 0; } else { indexToFocus = focusedItemIndex + 1; } } setFocusedItemIndex(indexToFocus); break; } } }; return ( ); };