{"version":3,"file":"SelectBase.mjs","sources":["../../../../src/components/Select/SelectBase.tsx"],"sourcesContent":["import { isArray, negate } from 'lodash';\nimport { ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport {\n  default as ReactSelect,\n  IndicatorsContainerProps,\n  Props as ReactSelectProps,\n  ClearIndicatorProps,\n} from 'react-select';\nimport { default as ReactAsyncSelect } from 'react-select/async';\nimport { default as AsyncCreatable } from 'react-select/async-creatable';\nimport Creatable from 'react-select/creatable';\n\nimport { SelectableValue, toOption } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes';\nimport { t, Trans } from '../../utils/i18n';\nimport { Icon } from '../Icon/Icon';\nimport { Spinner } from '../Spinner/Spinner';\n\nimport { CustomInput } from './CustomInput';\nimport { DropdownIndicator } from './DropdownIndicator';\nimport { IndicatorsContainer } from './IndicatorsContainer';\nimport { InputControl } from './InputControl';\nimport { MultiValueContainer, MultiValueRemove } from './MultiValue';\nimport { SelectContainer } from './SelectContainer';\nimport { SelectMenu, SelectMenuOptions, VirtualizedSelectMenu } from './SelectMenu';\nimport { SelectOptionGroup } from './SelectOptionGroup';\nimport { SelectOptionGroupHeader } from './SelectOptionGroupHeader';\nimport { Props, SingleValue } from './SingleValue';\nimport { ValueContainer } from './ValueContainer';\nimport { getSelectStyles } from './getSelectStyles';\nimport { useCustomSelectStyles } from './resetSelectStyles';\nimport { ActionMeta, InputActionMeta, SelectBaseProps, ToggleAllState } from './types';\nimport { cleanValue, findSelectedValue, omitDescriptions } from './utils';\n\nconst CustomControl = (props: any) => {\n  const {\n    children,\n    innerProps,\n    selectProps: { menuIsOpen, onMenuClose, onMenuOpen },\n    isFocused,\n    isMulti,\n    getValue,\n    innerRef,\n  } = props;\n  const selectProps = props.selectProps as SelectBaseProps<any>;\n\n  if (selectProps.renderControl) {\n    return React.createElement(selectProps.renderControl, {\n      isOpen: menuIsOpen,\n      value: isMulti ? getValue() : getValue()[0],\n      ref: innerRef,\n      onClick: menuIsOpen ? onMenuClose : onMenuOpen,\n      onBlur: onMenuClose,\n      disabled: !!selectProps.disabled,\n      invalid: !!selectProps.invalid,\n    });\n  }\n\n  return (\n    <InputControl\n      ref={innerRef}\n      innerProps={innerProps}\n      prefix={selectProps.prefix}\n      focused={isFocused}\n      invalid={!!selectProps.invalid}\n      disabled={!!selectProps.disabled}\n    >\n      {children}\n    </InputControl>\n  );\n};\n\ninterface SelectPropsWithExtras extends ReactSelectProps {\n  maxVisibleValues?: number | undefined;\n  showAllSelectedWhenOpen: boolean;\n  noMultiValueWrap?: boolean;\n}\n\nfunction determineToggleAllState(selectedValue: SelectableValue[], options: SelectableValue[]) {\n  if (options.length === selectedValue.length) {\n    return ToggleAllState.allSelected;\n  } else if (selectedValue.length === 0) {\n    return ToggleAllState.noneSelected;\n  } else {\n    return ToggleAllState.indeterminate;\n  }\n}\n\nexport function SelectBase<T, Rest = {}>({\n  allowCustomValue = false,\n  allowCreateWhileLoading = false,\n  'aria-label': ariaLabel,\n  'data-testid': dataTestid,\n  autoFocus = false,\n  backspaceRemovesValue = true,\n  blurInputOnSelect,\n  cacheOptions,\n  className,\n  closeMenuOnSelect = true,\n  components,\n  createOptionPosition = 'last',\n  defaultOptions,\n  defaultValue,\n  disabled = false,\n  filterOption,\n  formatCreateLabel,\n  getOptionLabel,\n  getOptionValue,\n  inputValue,\n  invalid,\n  isClearable = false,\n  id,\n  isLoading = false,\n  isMulti = false,\n  inputId,\n  isOpen,\n  isOptionDisabled,\n  isSearchable = true,\n  loadOptions,\n  loadingMessage = 'Loading options...',\n  maxMenuHeight = 300,\n  minMenuHeight,\n  maxVisibleValues,\n  menuPlacement = 'auto',\n  menuPosition,\n  menuShouldPortal = true,\n  noOptionsMessage = t('grafana-ui.select.no-options-label', 'No options found'),\n  onBlur,\n  onChange,\n  onCloseMenu,\n  onCreateOption,\n  onInputChange,\n  onKeyDown,\n  onMenuScrollToBottom,\n  onMenuScrollToTop,\n  onOpenMenu,\n  onFocus,\n  toggleAllOptions,\n  openMenuOnFocus = false,\n  options = [],\n  placeholder = t('grafana-ui.select.placeholder', 'Choose'),\n  prefix,\n  renderControl,\n  showAllSelectedWhenOpen = true,\n  tabSelectsValue = true,\n  value,\n  virtualized = false,\n  noMultiValueWrap,\n  width,\n  isValidNewOption,\n  formatOptionLabel,\n  hideSelectedOptions,\n  ...rest\n}: SelectBaseProps<T> & Rest) {\n  const theme = useTheme2();\n  const styles = getSelectStyles(theme);\n\n  const reactSelectRef = useRef<{ controlRef: HTMLElement }>(null);\n  const [closeToBottom, setCloseToBottom] = useState<boolean>(false);\n  const selectStyles = useCustomSelectStyles(theme, width);\n  const [hasInputValue, setHasInputValue] = useState<boolean>(!!inputValue);\n\n  // Infer the menu position for asynchronously loaded options. menuPlacement=\"auto\" doesn't work when the menu is\n  // automatically opened when the component is created (it happens in SegmentSelect by setting menuIsOpen={true}).\n  // We can remove this workaround when the bug in react-select is fixed: https://github.com/JedWatson/react-select/issues/4936\n  // Note: we use useEffect instead of hooking into onMenuOpen due to another bug: https://github.com/JedWatson/react-select/issues/3375\n  useEffect(() => {\n    if (\n      loadOptions &&\n      isOpen &&\n      reactSelectRef.current &&\n      reactSelectRef.current.controlRef &&\n      menuPlacement === 'auto'\n    ) {\n      const distance = window.innerHeight - reactSelectRef.current.controlRef.getBoundingClientRect().bottom;\n      setCloseToBottom(distance < maxMenuHeight);\n    }\n  }, [maxMenuHeight, menuPlacement, loadOptions, isOpen]);\n\n  const onChangeWithEmpty = useCallback(\n    (value: SelectableValue<T>, action: ActionMeta) => {\n      if (isMulti && (value === undefined || value === null)) {\n        return onChange([], action);\n      }\n      onChange(value, action);\n    },\n    [isMulti, onChange]\n  );\n\n  let ReactSelectComponent = ReactSelect;\n\n  const creatableProps: ComponentProps<typeof Creatable<SelectableValue<T>>> = {};\n  let asyncSelectProps: any = {};\n  let selectedValue;\n  if (isMulti && loadOptions) {\n    selectedValue = value as any;\n  } else {\n    // If option is passed as a plain value (value property from SelectableValue property)\n    // we are selecting the corresponding value from the options\n    if (isMulti && value && Array.isArray(value) && !loadOptions) {\n      selectedValue = value.map((v) => {\n        // @ts-ignore\n        const selectableValue = findSelectedValue(v.value ?? v, options);\n        // If the select allows custom values there likely won't be a selectableValue in options\n        // so we must return a new selectableValue\n        if (selectableValue) {\n          return selectableValue;\n        }\n        return typeof v === 'string' ? toOption(v) : v;\n      });\n    } else if (loadOptions) {\n      const hasValue = defaultValue || value;\n      selectedValue = hasValue ? [hasValue] : [];\n    } else {\n      selectedValue = cleanValue(value, options);\n    }\n  }\n\n  const commonSelectProps = {\n    'aria-label': ariaLabel,\n    'data-testid': dataTestid,\n    autoFocus,\n    backspaceRemovesValue,\n    blurInputOnSelect,\n    captureMenuScroll: onMenuScrollToBottom || onMenuScrollToTop,\n    closeMenuOnSelect,\n    // We don't want to close if we're actually scrolling the menu\n    // So only close if none of the parents are the select menu itself\n    defaultValue,\n    // Also passing disabled, as this is the new Select API, and I want to use this prop instead of react-select's one\n    disabled,\n    // react-select always tries to filter the options even at first menu open, which is a problem for performance\n    // in large lists. So we set it to not try to filter the options if there is no input value.\n    filterOption: hasInputValue ? filterOption : null,\n    getOptionLabel,\n    getOptionValue,\n    hideSelectedOptions,\n    inputValue,\n    invalid,\n    isClearable,\n    id,\n    // Passing isDisabled as react-select accepts this prop\n    isDisabled: disabled,\n    isLoading,\n    isMulti,\n    inputId,\n    isOptionDisabled,\n    isSearchable,\n    maxMenuHeight,\n    minMenuHeight,\n    maxVisibleValues,\n    menuIsOpen: isOpen,\n    menuPlacement: menuPlacement === 'auto' && closeToBottom ? 'top' : menuPlacement,\n    menuPosition,\n    menuShouldBlockScroll: true,\n    menuPortalTarget: menuShouldPortal && typeof document !== 'undefined' ? document.body : undefined,\n    menuShouldScrollIntoView: false,\n    onBlur,\n    onChange: onChangeWithEmpty,\n    onInputChange: (val: string, actionMeta: InputActionMeta) => {\n      const newValue = onInputChange?.(val, actionMeta) ?? val;\n      const newHasValue = !!newValue;\n      if (newHasValue !== hasInputValue) {\n        setHasInputValue(newHasValue);\n      }\n\n      return newValue;\n    },\n    onKeyDown,\n    onMenuClose: onCloseMenu,\n    onMenuOpen: onOpenMenu,\n    onMenuScrollToBottom: onMenuScrollToBottom,\n    onMenuScrollToTop: onMenuScrollToTop,\n    onFocus,\n    formatOptionLabel,\n    openMenuOnFocus,\n    options: virtualized ? omitDescriptions(options) : options,\n    placeholder,\n    prefix,\n    renderControl,\n    showAllSelectedWhenOpen,\n    tabSelectsValue,\n    value: isMulti ? selectedValue : selectedValue?.[0],\n    noMultiValueWrap,\n  };\n\n  if (allowCustomValue) {\n    ReactSelectComponent = Creatable;\n    creatableProps.allowCreateWhileLoading = allowCreateWhileLoading;\n    creatableProps.formatCreateLabel = formatCreateLabel ?? defaultFormatCreateLabel;\n    creatableProps.onCreateOption = onCreateOption;\n    creatableProps.createOptionPosition = createOptionPosition;\n    creatableProps.isValidNewOption = isValidNewOption;\n  }\n\n  // Instead of having AsyncSelect, as a separate component we render ReactAsyncSelect\n  if (loadOptions) {\n    ReactSelectComponent = allowCustomValue ? AsyncCreatable : ReactAsyncSelect;\n    asyncSelectProps = {\n      loadOptions,\n      cacheOptions,\n      defaultOptions,\n    };\n  }\n\n  const SelectMenuComponent = virtualized ? VirtualizedSelectMenu : SelectMenu;\n\n  let toggleAllState = ToggleAllState.noneSelected;\n  if (toggleAllOptions?.enabled && isArray(selectedValue)) {\n    if (toggleAllOptions?.determineToggleAllState) {\n      toggleAllState = toggleAllOptions.determineToggleAllState(selectedValue, options);\n    } else {\n      toggleAllState = determineToggleAllState(selectedValue, options);\n    }\n  }\n\n  const toggleAll = useCallback(() => {\n    let toSelect = toggleAllState === ToggleAllState.noneSelected ? options : [];\n    if (toggleAllOptions?.optionsFilter) {\n      toSelect =\n        toggleAllState === ToggleAllState.noneSelected\n          ? options.filter(toggleAllOptions.optionsFilter)\n          : options.filter(negate(toggleAllOptions.optionsFilter));\n    }\n\n    onChange(toSelect, {\n      action: 'select-option',\n      option: {},\n    });\n  }, [options, toggleAllOptions, onChange, toggleAllState]);\n\n  return (\n    <>\n      <ReactSelectComponent\n        ref={reactSelectRef}\n        components={{\n          MenuList: SelectMenuComponent,\n          Group: SelectOptionGroup,\n          GroupHeading: SelectOptionGroupHeader,\n          ValueContainer,\n          IndicatorsContainer: CustomIndicatorsContainer,\n          IndicatorSeparator: IndicatorSeparator,\n          Control: CustomControl,\n          Option: SelectMenuOptions,\n          ClearIndicator(props: ClearIndicatorProps) {\n            const { clearValue } = props;\n            return (\n              <Icon\n                name=\"times\"\n                role=\"button\"\n                aria-label={t('grafana-ui.select.clear-value', 'Clear value')}\n                className={styles.singleValueRemove}\n                onMouseDown={(e) => {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  clearValue();\n                }}\n              />\n            );\n          },\n          LoadingIndicator() {\n            return <Spinner inline />;\n          },\n          LoadingMessage() {\n            return <div className={styles.loadingMessage}>{loadingMessage}</div>;\n          },\n          NoOptionsMessage() {\n            return (\n              <div\n                className={styles.loadingMessage}\n                aria-label={t('grafana-ui.select.empty-options', 'No options provided')}\n              >\n                {noOptionsMessage}\n              </div>\n            );\n          },\n          DropdownIndicator: DropdownIndicator,\n          SingleValue(props: Props<T>) {\n            return <SingleValue {...props} isDisabled={disabled} />;\n          },\n          SelectContainer,\n          MultiValueContainer: MultiValueContainer,\n          MultiValueRemove: !disabled ? MultiValueRemove : () => null,\n          Input: CustomInput,\n          ...components,\n        }}\n        toggleAllOptions={\n          toggleAllOptions?.enabled && {\n            state: toggleAllState,\n            selectAllClicked: toggleAll,\n            selectedCount: isArray(selectedValue) ? selectedValue.length : undefined,\n          }\n        }\n        styles={selectStyles}\n        className={className}\n        {...commonSelectProps}\n        {...creatableProps}\n        {...asyncSelectProps}\n        {...rest}\n      />\n    </>\n  );\n}\n\nfunction defaultFormatCreateLabel(input: string) {\n  return (\n    <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n      <div>{input}</div>\n      <div style={{ flexGrow: 1 }} />\n      <div className=\"muted small\" style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n        <Trans i18nKey=\"grafana-ui.select.default-create-label\">Hit enter to add</Trans>\n      </div>\n    </div>\n  );\n}\n\ntype CustomIndicatorsContainerProps = IndicatorsContainerProps & {\n  selectProps: SelectPropsWithExtras;\n  children: React.ReactNode;\n};\n\nfunction CustomIndicatorsContainer(props: CustomIndicatorsContainerProps) {\n  const { showAllSelectedWhenOpen, maxVisibleValues, menuIsOpen } = props.selectProps;\n\n  const value = props.getValue();\n\n  if (maxVisibleValues !== undefined && Array.isArray(props.children)) {\n    const selectedValuesCount = value.length;\n\n    if (selectedValuesCount > maxVisibleValues && !(showAllSelectedWhenOpen && menuIsOpen)) {\n      const indicatorChildren = [...props.children];\n      indicatorChildren.splice(\n        -1,\n        0,\n        <span key=\"excess-values\" id=\"excess-values\">\n          {`(+${selectedValuesCount - maxVisibleValues})`}\n        </span>\n      );\n\n      return <IndicatorsContainer {...props}>{indicatorChildren}</IndicatorsContainer>;\n    }\n  }\n\n  return <IndicatorsContainer {...props} />;\n}\n\nfunction IndicatorSeparator() {\n  return <></>;\n}\n"],"names":["value"],"mappings":"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"}