import type { AriaAttributes } from 'react'; import React from 'react'; import type { AriaButtonOptions } from 'react-aria'; import { useButton, useObjectRef } from 'react-aria'; import type { Node } from 'react-stately'; import classNames from 'classnames'; import { useTranslations } from '@shoptet/ui-core-web'; import type { SafeExtract, Size } from '../../../types'; import { forwardRef } from '../../../utils/forwardRef'; import type { CommonInputProps, PlaceholderProps } from '../types'; import type { MultiSelectState } from './hooks/useMultiSelectState'; import { dictionary, type MultiSelectTranslations } from './dictionary'; export interface MultiSelectInputProps extends Pick, PlaceholderProps, AriaButtonOptions<'button'>, Pick, Pick, 'role'> { state: MultiSelectState; width?: SafeExtract | 'auto'; } export const MultiSelectInput = forwardRef(function MultiSelectInput( { state, error, warning, width, placeholder, role, label, 'aria-autocomplete': ariaAutocomplete, ...props }: MultiSelectInputProps, forwardedRef: React.ForwardedRef ) { const buttonRef = useObjectRef(forwardedRef); const { buttonProps } = useButton(props, buttonRef); const translations = useTranslations(dictionary); return ( ); }); function getVisibleValue(state: MultiSelectState, translations: MultiSelectTranslations) { const items = [...state.selectionManager.selectedKeys] .map(key => state.originalCollection.getItem(key)) .filter((item): item is Node => !!item); return items.length > 1 ? translations.multipleSelected(items.length) : items[0]?.textValue; }