MCPcopy
hub / github.com/primer/react / SelectPanel

Function SelectPanel

packages/react/src/SelectPanel/SelectPanel.tsx:63–246  ·  view source on GitHub ↗
({
  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)

Source from the content-addressed store, hash-verified

61}
62
63export 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

Callers

nothing calls this directly

Calls 6

useIdFunction · 0.90
useProvidedStateOrCreateFunction · 0.90
useProvidedRefOrCreateFunction · 0.90
isMultiSelectVariantFunction · 0.85
onCloseFunction · 0.85
onOpenChangeFunction · 0.70

Tested by

no test coverage detected