render()

in packages/eui/src/components/form/field_search/field_search.tsx [211:302]


  render() {
    const { defaultFullWidth } = this.context as FormContextValue;
    const {
      stylesMemoizer,
      className,
      id,
      name,
      placeholder,
      isInvalid,
      disabled,
      fullWidth = defaultFullWidth,
      isLoading,
      inputRef,
      incremental,
      compressed,
      onSearch,
      isClearable: _isClearable,
      append,
      prepend,
      ...rest
    } = this.props;

    let value = this.props.value;
    if (typeof this.props.value !== 'string') value = this.state.value;

    // Set actual value of isClearable if value exists as well
    const isClearable = Boolean(
      _isClearable && value && !rest.readOnly && !disabled
    );

    const classes = classNames(
      'euiFieldSearch',
      {
        'euiFieldSearch-isLoading': isLoading,
        'euiFieldSearch-isClearable': isClearable,
        'euiFieldSearch-isInvalid': isInvalid,
      },
      className
    );

    const styles = stylesMemoizer(euiFieldSearchStyles);
    const cssStyles = [
      styles.euiFieldSearch,
      compressed ? styles.compressed : styles.uncompressed,
      fullWidth ? styles.fullWidth : styles.formWidth,
      (prepend || append) && styles.inGroup,
    ];

    return (
      <EuiI18n
        token="euiFieldSearch.clearSearchButtonLabel"
        default="Clear search input"
      >
        {(clearSearchButtonLabel: string) => (
          <EuiFormControlLayout
            icon="search"
            fullWidth={fullWidth}
            isLoading={isLoading}
            isInvalid={isInvalid}
            isDisabled={disabled}
            clear={
              isClearable
                ? {
                    onClick: this.onClear,
                    'aria-label': clearSearchButtonLabel,
                    'data-test-subj': 'clearSearchButton',
                  }
                : undefined
            }
            compressed={compressed}
            append={append}
            prepend={prepend}
          >
            <EuiValidatableControl isInvalid={isInvalid}>
              <input
                type="search"
                id={id}
                name={name}
                placeholder={placeholder}
                className={classes}
                css={cssStyles}
                onKeyUp={(e) => this.onKeyUp(e, incremental, onSearch)}
                disabled={disabled}
                ref={this.setRef}
                {...rest}
              />
            </EuiValidatableControl>
          </EuiFormControlLayout>
        )}
      </EuiI18n>
    );
  }