({
open,
onOpenChange,
renderAnchor = props => {
const {children, ...rest} = props
return (
<Button trailingAction={TriangleDownIcon} {...rest}>
{children}
</Button>
)
},
anchorRef: externalAnchorRef,
placeholder,
placeholderText = 'Filter items',
inputLabel = placeholderText,
selected,
title = isMultiSelectVariant(selected) ? 'Select items' : 'Select an item',
subtitle,
onSelectedChange,
filterValue: externalFilterValue,
onFilterChange: externalOnFilterChange,
items,
footer,
textInputProps,
overlayProps,
sx,
...listProps
}: SelectPanelProps)
| 61 | } |
| 62 | |
| 63 | export function SelectPanel({ |
| 64 | open, |
| 65 | onOpenChange, |
| 66 | renderAnchor = props => { |
| 67 | const {children, ...rest} = props |
| 68 | return ( |
| 69 | <Button trailingAction={TriangleDownIcon} {...rest}> |
| 70 | {children} |
| 71 | </Button> |
| 72 | ) |
| 73 | }, |
| 74 | anchorRef: externalAnchorRef, |
| 75 | placeholder, |
| 76 | placeholderText = 'Filter items', |
| 77 | inputLabel = placeholderText, |
| 78 | selected, |
| 79 | title = isMultiSelectVariant(selected) ? 'Select items' : 'Select an item', |
| 80 | subtitle, |
| 81 | onSelectedChange, |
| 82 | filterValue: externalFilterValue, |
| 83 | onFilterChange: externalOnFilterChange, |
| 84 | items, |
| 85 | footer, |
| 86 | textInputProps, |
| 87 | overlayProps, |
| 88 | sx, |
| 89 | ...listProps |
| 90 | }: SelectPanelProps): JSX.Element { |
| 91 | const titleId = useId() |
| 92 | const subtitleId = useId() |
| 93 | const [filterValue, setInternalFilterValue] = useProvidedStateOrCreate(externalFilterValue, undefined, '') |
| 94 | const onFilterChange: FilteredActionListProps['onFilterChange'] = useCallback( |
| 95 | (value, e) => { |
| 96 | externalOnFilterChange(value, e) |
| 97 | setInternalFilterValue(value) |
| 98 | }, |
| 99 | [externalOnFilterChange, setInternalFilterValue], |
| 100 | ) |
| 101 | |
| 102 | const anchorRef = useProvidedRefOrCreate(externalAnchorRef) |
| 103 | const onOpen: AnchoredOverlayProps['onOpen'] = useCallback( |
| 104 | (gesture: Parameters<Exclude<AnchoredOverlayProps['onOpen'], undefined>>[0]) => onOpenChange(true, gesture), |
| 105 | [onOpenChange], |
| 106 | ) |
| 107 | const onClose = useCallback( |
| 108 | (gesture: Parameters<Exclude<AnchoredOverlayProps['onClose'], undefined>>[0] | 'selection') => { |
| 109 | onOpenChange(false, gesture) |
| 110 | }, |
| 111 | [onOpenChange], |
| 112 | ) |
| 113 | |
| 114 | const renderMenuAnchor = useMemo(() => { |
| 115 | if (renderAnchor === null) { |
| 116 | return null |
| 117 | } |
| 118 | |
| 119 | const selectedItems = Array.isArray(selected) ? selected : [...(selected ? [selected] : [])] |
| 120 |
nothing calls this directly
no test coverage detected