{"version":3,"file":"Cascader.mjs","sources":["../../../../src/components/Cascader/Cascader.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport memoize from 'micro-memoize';\nimport RCCascader from 'rc-cascader';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { withTheme2 } from '../../themes';\nimport { Themeable2 } from '../../types';\nimport { t } from '../../utils/i18n';\nimport { Icon } from '../Icon/Icon';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Input } from '../Input/Input';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { Select } from '../Select/Select';\n\nimport { onChangeCascader } from './optionMappings';\nimport { getCascaderStyles } from './styles';\n\nexport interface CascaderProps extends Themeable2 {\n  /** The separator between levels in the search */\n  separator?: string;\n  placeholder?: string;\n  /** As the onSelect handler reports only the leaf node selected, the leaf nodes should have unique value. */\n  options: CascaderOption[];\n  /** Changes the value for every selection, including branch nodes. Defaults to true. */\n  changeOnSelect?: boolean;\n  onSelect(val: string): void;\n  /** Sets the width to a multiple of 8px. Should only be used with inline forms. Setting width of the container is preferred in other cases.*/\n  width?: number;\n  /** Single string that needs to be the same as value of the last item in the selection chain. */\n  initialValue?: string;\n  allowCustomValue?: boolean;\n  /** A function for formatting the message for custom value creation. Only applies when allowCustomValue is set to true*/\n  formatCreateLabel?: (val: string) => string;\n  /** If true all levels are shown in the input by simple concatenating the labels */\n  displayAllSelectedLevels?: boolean;\n  onBlur?: () => void;\n  /** When mounted focus automatically on the input */\n  autoFocus?: boolean;\n  /** Keep the dropdown open all the time, useful in case whole cascader visibility is controlled by the parent */\n  alwaysOpen?: boolean;\n  /** Don't show what is selected in the cascader input/search. Useful when input is used just as search and the\n      cascader is hidden after selection. */\n  hideActiveLevelLabel?: boolean;\n  disabled?: boolean;\n  /** ID for the underlying Select/Cascader component */\n  id?: string;\n  /** Whether you can clear the selected value or not */\n  isClearable?: boolean;\n}\n\ninterface CascaderState {\n  isSearching: boolean;\n  focusCascade: boolean;\n  //Array for cascade navigation\n  rcValue: SelectableValue<string[]>;\n  activeLabel: string;\n  inputValue: string;\n}\n\nexport interface CascaderOption {\n  /**\n   *  The value used under the hood\n   */\n  value: string;\n  /**\n   *  The label to display in the UI\n   */\n  label: string;\n  /** Items will be just flattened into the main list of items recursively. */\n  items?: CascaderOption[];\n  disabled?: boolean;\n  /** Avoid using */\n  title?: string;\n  /**  Children will be shown in a submenu. Use 'items' instead, as 'children' exist to ensure backwards compatibility.*/\n  children?: CascaderOption[];\n}\n\nconst disableDivFocus = css({\n  '&:focus': {\n    outline: 'none',\n  },\n});\n\nconst DEFAULT_SEPARATOR = ' / ';\n\nclass UnthemedCascader extends PureComponent<CascaderProps, CascaderState> {\n  constructor(props: CascaderProps) {\n    super(props);\n    const searchableOptions = this.getSearchableOptions(props.options);\n    const { rcValue, activeLabel } = this.setInitialValue(searchableOptions, props.initialValue);\n    this.state = {\n      isSearching: false,\n      focusCascade: false,\n      rcValue,\n      activeLabel,\n      inputValue: '',\n    };\n  }\n\n  static defaultProps = { changeOnSelect: true };\n\n  flattenOptions = (options: CascaderOption[], optionPath: CascaderOption[] = []) => {\n    let selectOptions: Array<SelectableValue<string[]>> = [];\n    for (const option of options) {\n      const cpy = [...optionPath];\n      cpy.push(option);\n      if (!option.items || option.items.length === 0) {\n        selectOptions.push({\n          singleLabel: cpy[cpy.length - 1].label,\n          label: cpy.map((o) => o.label).join(this.props.separator || DEFAULT_SEPARATOR),\n          value: cpy.map((o) => o.value),\n        });\n      } else {\n        selectOptions = [...selectOptions, ...this.flattenOptions(option.items, cpy)];\n      }\n    }\n    return selectOptions;\n  };\n\n  getSearchableOptions = memoize((options: CascaderOption[]) => this.flattenOptions(options));\n\n  setInitialValue(searchableOptions: Array<SelectableValue<string[]>>, initValue?: string) {\n    if (!initValue) {\n      return { rcValue: [], activeLabel: '' };\n    }\n    for (const option of searchableOptions) {\n      const optionPath = option.value || [];\n\n      if (optionPath[optionPath.length - 1] === initValue) {\n        return {\n          rcValue: optionPath,\n          activeLabel: this.props.displayAllSelectedLevels ? option.label : option.singleLabel || '',\n        };\n      }\n    }\n    if (this.props.allowCustomValue) {\n      return { rcValue: [], activeLabel: initValue };\n    }\n    return { rcValue: [], activeLabel: '' };\n  }\n\n  //For rc-cascader\n  onChange = (value: string[], selectedOptions: CascaderOption[]) => {\n    const activeLabel = this.props.hideActiveLevelLabel\n      ? ''\n      : this.props.displayAllSelectedLevels\n        ? selectedOptions.map((option) => option.label).join(this.props.separator || DEFAULT_SEPARATOR)\n        : selectedOptions[selectedOptions.length - 1].label;\n    const state: CascaderState = {\n      rcValue: { value, label: activeLabel },\n      focusCascade: true,\n      activeLabel,\n      isSearching: false,\n      inputValue: activeLabel,\n    };\n    this.setState(state);\n    this.props.onSelect(selectedOptions[selectedOptions.length - 1].value);\n  };\n\n  //For select\n  onSelect = (obj: SelectableValue<string[]>) => {\n    const valueArray = obj.value || [];\n    const activeLabel = this.props.displayAllSelectedLevels ? obj.label : obj.singleLabel || '';\n    const state: CascaderState = {\n      activeLabel: activeLabel,\n      inputValue: activeLabel,\n      rcValue: { value: valueArray, label: activeLabel },\n      isSearching: false,\n      focusCascade: false,\n    };\n    this.setState(state);\n    this.props.onSelect(valueArray[valueArray.length - 1]);\n  };\n\n  onCreateOption = (value: string) => {\n    this.setState({\n      activeLabel: value,\n      inputValue: value,\n      rcValue: [],\n      isSearching: false,\n    });\n    this.props.onSelect(value);\n  };\n\n  onBlur = () => {\n    this.setState({\n      isSearching: false,\n      focusCascade: false,\n    });\n\n    if (this.state.activeLabel === '') {\n      this.setState({\n        rcValue: [],\n      });\n    }\n    this.props.onBlur?.();\n  };\n\n  onBlurCascade = () => {\n    this.setState({\n      focusCascade: false,\n    });\n\n    this.props.onBlur?.();\n  };\n\n  onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (['ArrowDown', 'ArrowUp', 'Enter', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n      return;\n    }\n    const { activeLabel } = this.state;\n    this.setState({\n      focusCascade: false,\n      isSearching: true,\n      inputValue: activeLabel,\n    });\n  };\n\n  onSelectInputChange = (value: string) => {\n    this.setState({\n      inputValue: value,\n    });\n  };\n\n  render() {\n    const {\n      allowCustomValue,\n      formatCreateLabel,\n      placeholder,\n      width,\n      changeOnSelect,\n      options,\n      disabled,\n      id,\n      isClearable,\n      theme,\n    } = this.props;\n    const { focusCascade, isSearching, rcValue, activeLabel, inputValue } = this.state;\n\n    const searchableOptions = this.getSearchableOptions(options);\n    const styles = getCascaderStyles(theme);\n\n    return (\n      <div>\n        {isSearching ? (\n          <Select\n            allowCustomValue={allowCustomValue}\n            placeholder={placeholder}\n            autoFocus={!focusCascade}\n            onChange={this.onSelect}\n            onBlur={this.onBlur}\n            options={searchableOptions}\n            onCreateOption={this.onCreateOption}\n            formatCreateLabel={formatCreateLabel}\n            width={width}\n            onInputChange={this.onSelectInputChange}\n            disabled={disabled}\n            inputValue={inputValue}\n            inputId={id}\n          />\n        ) : (\n          <RCCascader\n            onChange={onChangeCascader(this.onChange)}\n            options={options}\n            changeOnSelect={changeOnSelect}\n            value={rcValue.value}\n            fieldNames={{ label: 'label', value: 'value', children: 'items' }}\n            expandIcon={null}\n            open={this.props.alwaysOpen}\n            disabled={disabled}\n            dropdownClassName={styles.dropdown}\n          >\n            <div className={disableDivFocus}>\n              <Input\n                autoFocus={this.props.autoFocus}\n                width={width}\n                placeholder={placeholder}\n                onBlur={this.onBlurCascade}\n                value={activeLabel}\n                onKeyDown={this.onInputKeyDown}\n                onChange={() => {}}\n                suffix={\n                  <Stack gap={0.5}>\n                    {isClearable && activeLabel !== '' && (\n                      <IconButton\n                        name=\"times\"\n                        aria-label={t('grafana-ui.cascader.clear-button', 'Clear selection')}\n                        onClick={(e) => {\n                          e.preventDefault();\n                          e.stopPropagation();\n                          this.setState({ rcValue: [], activeLabel: '', inputValue: '' });\n                          this.props.onSelect('');\n                        }}\n                      />\n                    )}\n                    <Icon name={focusCascade ? 'angle-up' : 'angle-down'} />\n                  </Stack>\n                }\n                disabled={disabled}\n                id={id}\n              />\n            </div>\n          </RCCascader>\n        )}\n      </div>\n    );\n  }\n}\n\nexport const Cascader = withTheme2(UnthemedCascader);\n"],"names":[],"mappings":"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"}