constructor(props) {
        super(props);
        const normalizedOptions = getNormalizedOptions(props.options || []);
        this.state = {
            searchValue: '',
            isOpen: false,
            isFocused: false,
            options: normalizedOptions,
            focusedItemIndex: getInitialFocusedIndex(
                normalizedOptions,
                props.preferredSelectedOption,
            ),
            showScrollUpArrow: undefined,
            showScrollDownArrow: undefined,
        };
        this.inputId = uniqueId('lookup-input');
        this.listboxId = uniqueId('lookup-listbox');
        this.errorMessageId = uniqueId('error-message');
        this.containerRef = React.createRef();
        this.inputRef = React.createRef();
        this.menuRef = React.createRef();
        this.handleSearch = this.handleSearch.bind(this);
        this.clearInput = this.clearInput.bind(this);
        this.handleChange = this.handleChange.bind(this);
        this.handleFocus = this.handleFocus.bind(this);
        this.handleRemoveValue = this.handleRemoveValue.bind(this);
        this.handleBlur = this.handleBlur.bind(this);
        this.handleHover = this.handleHover.bind(this);
        this.handleKeyDown = this.handleKeyDown.bind(this);
        this.handleKeyUpPressed = this.handleKeyUpPressed.bind(this);
        this.handleKeyDownPressed = this.handleKeyDownPressed.bind(this);
        this.handleKeyEnterPressed = this.handleKeyEnterPressed.bind(this);
        this.keyHandlerMap = {
            [UP_KEY]: this.handleKeyUpPressed,
            [DOWN_KEY]: this.handleKeyDownPressed,
            [ENTER_KEY]: this.handleKeyEnterPressed,
        };
        this.handleScrollDownArrowHover = this.handleScrollDownArrowHover.bind(this);
        this.handleScrollUpArrowHover = this.handleScrollUpArrowHover.bind(this);
        this.stopArrowScoll = this.stopArrowScoll.bind(this);
        this.updateScrollingArrows = this.updateScrollingArrows.bind(this);
        this.handleWindowScroll = this.handleWindowScroll.bind(this);
        this.handleOverlayOpened = this.handleOverlayOpened.bind(this);
        this.handleClick = this.handleClick.bind(this);
        this.windowScrolling = new WindowScrolling();
    }
A Lookup is an autocomplete text input that will search against a database object,
it is enhanced by a panel of suggested options.
@category Form