UNPKG

@grafana/ui

Version:
1 lines 16.2 kB
{"version":3,"file":"Select.mjs","sources":["../../../../../../src/components/Forms/Legacy/Select/Select.tsx"],"sourcesContent":["// Libraries\nimport classNames from 'classnames';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\nimport { default as ReactSelect, components, MenuListProps } from 'react-select';\nimport { default as ReactAsyncSelect } from 'react-select/async';\nimport Creatable from 'react-select/creatable';\n\n// Components\nimport { SelectableValue, ThemeContext } from '@grafana/data';\n\nimport { ScrollContainer } from '../../../ScrollContainer/ScrollContainer';\nimport { SingleValue } from '../../../Select/SingleValue';\nimport resetSelectStyles from '../../../Select/resetSelectStyles';\nimport { SelectCommonProps, SelectAsyncProps } from '../../../Select/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { PopoverContent } from '../../../Tooltip/types';\n\nimport IndicatorsContainer from './IndicatorsContainer';\nimport NoOptionsMessage from './NoOptionsMessage';\nimport { SelectOption } from './SelectOption';\nimport { SelectOptionGroup } from './SelectOptionGroup';\n\n/**\n * Changes in new selects:\n * - noOptionsMessage & loadingMessage is of string type\n * - isDisabled is renamed to disabled\n */\ntype LegacyCommonProps<T> = Omit<SelectCommonProps<T>, 'noOptionsMessage' | 'disabled' | 'value' | 'loadingMessage'>;\n\ninterface AsyncProps<T> extends LegacyCommonProps<T>, Omit<SelectAsyncProps<T>, 'loadingMessage'> {\n loadingMessage?: () => string;\n noOptionsMessage?: () => string;\n tooltipContent?: PopoverContent;\n isDisabled?: boolean;\n value?: SelectableValue<T>;\n}\n\nexport interface LegacySelectProps<T> extends LegacyCommonProps<T> {\n tooltipContent?: PopoverContent;\n noOptionsMessage?: () => string;\n isDisabled?: boolean;\n value?: SelectableValue<T>;\n}\n\nexport const MenuList = (props: MenuListProps) => {\n return (\n <components.MenuList {...props}>\n <ScrollContainer showScrollIndicators overflowX=\"hidden\" maxHeight=\"inherit\">\n {props.children}\n </ScrollContainer>\n </components.MenuList>\n );\n};\n\n/** @deprecated Please use the `Select` component, as seen {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-select--basic in Storybook}. */\nexport class Select<T> extends PureComponent<LegacySelectProps<T>> {\n declare context: React.ContextType<typeof ThemeContext>;\n static contextType = ThemeContext;\n\n static defaultProps: Partial<LegacySelectProps<unknown>> = {\n className: '',\n isDisabled: false,\n isSearchable: true,\n isClearable: false,\n isMulti: false,\n openMenuOnFocus: false,\n autoFocus: false,\n isLoading: false,\n backspaceRemovesValue: true,\n maxMenuHeight: 300,\n tabSelectsValue: true,\n allowCustomValue: false,\n components: {\n Option: SelectOption,\n SingleValue,\n IndicatorsContainer,\n MenuList,\n Group: SelectOptionGroup,\n },\n };\n\n render() {\n const {\n defaultValue,\n getOptionLabel,\n getOptionValue,\n onChange,\n options,\n placeholder,\n width,\n value,\n className,\n isDisabled,\n isLoading,\n isSearchable,\n isClearable,\n backspaceRemovesValue,\n isMulti,\n autoFocus,\n openMenuOnFocus,\n onBlur,\n maxMenuHeight,\n noOptionsMessage,\n isOpen,\n components,\n tooltipContent,\n tabSelectsValue,\n onCloseMenu,\n onOpenMenu,\n allowCustomValue,\n formatCreateLabel,\n 'aria-label': ariaLabel,\n } = this.props;\n\n let widthClass = '';\n if (width) {\n widthClass = 'width-' + width;\n }\n\n let SelectComponent = ReactSelect;\n const creatableOptions: any = {};\n\n if (allowCustomValue) {\n SelectComponent = Creatable;\n creatableOptions.formatCreateLabel = formatCreateLabel ?? ((input: string) => input);\n }\n\n const selectClassNames = classNames('gf-form-input', 'gf-form-input--form-dropdown', widthClass, className);\n const selectComponents = { ...Select.defaultProps.components, ...components };\n return (\n <WrapInTooltip onCloseMenu={onCloseMenu} onOpenMenu={onOpenMenu} tooltipContent={tooltipContent} isOpen={isOpen}>\n {(onOpenMenuInternal, onCloseMenuInternal) => {\n return (\n <SelectComponent\n captureMenuScroll={false}\n classNamePrefix=\"gf-form-select-box\"\n className={selectClassNames}\n components={selectComponents}\n defaultValue={defaultValue}\n value={value}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n menuShouldScrollIntoView={false}\n isSearchable={isSearchable}\n onChange={onChange}\n options={options}\n placeholder={placeholder || 'Choose'}\n styles={resetSelectStyles(this.context)}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isClearable={isClearable}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={maxMenuHeight}\n noOptionsMessage={noOptionsMessage}\n isMulti={isMulti}\n backspaceRemovesValue={backspaceRemovesValue}\n menuIsOpen={isOpen}\n onMenuOpen={onOpenMenuInternal}\n onMenuClose={onCloseMenuInternal}\n tabSelectsValue={tabSelectsValue}\n aria-label={ariaLabel}\n {...creatableOptions}\n />\n );\n }}\n </WrapInTooltip>\n );\n }\n}\n\n/** @deprecated Please use the `Select` component with async functionality, as seen {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-select--basic-select-async in Storybook}. */\nexport class AsyncSelect<T> extends PureComponent<AsyncProps<T>> {\n static contextType = ThemeContext;\n\n static defaultProps: Partial<AsyncProps<unknown>> = {\n className: '',\n components: {},\n loadingMessage: () => 'Loading...',\n isDisabled: false,\n isClearable: false,\n isMulti: false,\n isSearchable: true,\n backspaceRemovesValue: true,\n autoFocus: false,\n openMenuOnFocus: false,\n maxMenuHeight: 300,\n };\n\n render() {\n const {\n defaultValue,\n getOptionLabel,\n getOptionValue,\n onChange,\n placeholder,\n width,\n value,\n className,\n loadOptions,\n defaultOptions,\n isLoading,\n loadingMessage,\n noOptionsMessage,\n isDisabled,\n isSearchable,\n isClearable,\n backspaceRemovesValue,\n autoFocus,\n onBlur,\n openMenuOnFocus,\n maxMenuHeight,\n isMulti,\n tooltipContent,\n onCloseMenu,\n onOpenMenu,\n isOpen,\n } = this.props;\n\n let widthClass = '';\n if (width) {\n widthClass = 'width-' + width;\n }\n\n const selectClassNames = classNames('gf-form-input', 'gf-form-input--form-dropdown', widthClass, className);\n\n return (\n <WrapInTooltip onCloseMenu={onCloseMenu} onOpenMenu={onOpenMenu} tooltipContent={tooltipContent} isOpen={isOpen}>\n {(onOpenMenuInternal, onCloseMenuInternal) => {\n return (\n <ReactAsyncSelect\n captureMenuScroll={false}\n classNamePrefix=\"gf-form-select-box\"\n className={selectClassNames}\n components={{\n Option: SelectOption,\n SingleValue,\n IndicatorsContainer,\n NoOptionsMessage,\n }}\n defaultValue={defaultValue}\n value={value}\n //@ts-expect-error\n getOptionLabel={getOptionLabel}\n //@ts-expect-error\n getOptionValue={getOptionValue}\n menuShouldScrollIntoView={false}\n //@ts-expect-error\n onChange={onChange}\n loadOptions={loadOptions}\n isLoading={isLoading}\n defaultOptions={defaultOptions}\n placeholder={placeholder || 'Choose'}\n //@ts-expect-error\n styles={resetSelectStyles(this.context)}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n isDisabled={isDisabled}\n isSearchable={isSearchable}\n isClearable={isClearable}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={maxMenuHeight}\n isMulti={isMulti}\n backspaceRemovesValue={backspaceRemovesValue}\n />\n );\n }}\n </WrapInTooltip>\n );\n }\n}\n\nexport interface TooltipWrapperProps {\n children: (onOpenMenu: () => void, onCloseMenu: () => void) => React.ReactNode;\n onOpenMenu?: () => void;\n onCloseMenu?: () => void;\n isOpen?: boolean;\n tooltipContent?: PopoverContent;\n}\n\nexport interface TooltipWrapperState {\n isOpenInternal: boolean;\n}\n\nexport class WrapInTooltip extends PureComponent<TooltipWrapperProps, TooltipWrapperState> {\n state: TooltipWrapperState = {\n isOpenInternal: false,\n };\n\n onOpenMenu = () => {\n const { onOpenMenu } = this.props;\n if (onOpenMenu) {\n onOpenMenu();\n }\n this.setState({ isOpenInternal: true });\n };\n\n onCloseMenu = () => {\n const { onCloseMenu } = this.props;\n if (onCloseMenu) {\n onCloseMenu();\n }\n this.setState({ isOpenInternal: false });\n };\n\n render() {\n const { children, isOpen, tooltipContent } = this.props;\n const { isOpenInternal } = this.state;\n\n let showTooltip: boolean | undefined = undefined;\n\n if (isOpenInternal || isOpen) {\n showTooltip = false;\n }\n\n if (tooltipContent) {\n return (\n <Tooltip show={showTooltip} content={tooltipContent} placement=\"bottom\">\n <div>\n {/* div needed for tooltip */}\n {children(this.onOpenMenu, this.onCloseMenu)}\n </div>\n </Tooltip>\n );\n } else {\n return <div>{children(this.onOpenMenu, this.onCloseMenu)}</div>;\n }\n }\n}\n\nexport default Select;\n"],"names":["components"],"mappings":"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"}