From 66f3174fddef030ad6c66a65b77725377c7b556e Mon Sep 17 00:00:00 2001 From: Si Taggart Date: Tue, 19 Jan 2021 18:54:06 -0800 Subject: [PATCH] fix(combobox): genericise some prop iterfaces for friendlier typings --- .../components/combobox/src/Combobox.tsx | 2 +- .../components/combobox/src/types.ts | 28 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/paste-core/components/combobox/src/Combobox.tsx b/packages/paste-core/components/combobox/src/Combobox.tsx index 87bdb3d87b..8a3abee9cc 100644 --- a/packages/paste-core/components/combobox/src/Combobox.tsx +++ b/packages/paste-core/components/combobox/src/Combobox.tsx @@ -17,7 +17,7 @@ import {ComboboxListbox} from './ComboboxListbox'; import {ComboboxListboxGroup} from './ComboboxListboxGroup'; import {ComboboxListboxOption} from './ComboboxListboxOption'; import {getIndexedItems, getGroupedItems} from './helpers'; -import type {GroupItemsProps, Item as ItemType, ItemProps, ItemsProps, ListBoxProps, ComboboxProps} from './types'; +import type {GroupItemsProps, ItemProps, ItemsProps, ListBoxProps, ComboboxProps} from './types'; // Fixes chevron overlapping really long text // Extra right padding is removed when autocomplete is true diff --git a/packages/paste-core/components/combobox/src/types.ts b/packages/paste-core/components/combobox/src/types.ts index 537ba4f555..e18cd1a1a2 100644 --- a/packages/paste-core/components/combobox/src/types.ts +++ b/packages/paste-core/components/combobox/src/types.ts @@ -7,25 +7,29 @@ import type {InputVariants, InputProps} from '@twilio-paste/input'; export type Item = string | {[key: string]: any}; +export interface OptionTemplateFn { + (item: ProvidedItem): React.ReactNode; +} + export interface ComboboxProps extends Omit { autocomplete?: boolean; helpText?: string | React.ReactNode; - initialIsOpen?: UseComboboxPrimitiveProps['initialIsOpen']; - initialSelectedItem?: UseComboboxPrimitiveProps['initialSelectedItem']; - items: UseComboboxPrimitiveProps['items']; - itemToString?: UseComboboxPrimitiveProps['itemToString']; + initialIsOpen?: UseComboboxPrimitiveProps['initialIsOpen']; + initialSelectedItem?: UseComboboxPrimitiveProps['initialSelectedItem']; + items: UseComboboxPrimitiveProps['items']; + itemToString?: UseComboboxPrimitiveProps['itemToString']; labelText: string | NonNullable; - onHighlightedIndexChange?: UseComboboxPrimitiveProps['onHighlightedIndexChange']; - onInputValueChange?: UseComboboxPrimitiveProps['onInputValueChange']; - onIsOpenChange?: UseComboboxPrimitiveProps['onIsOpenChange']; - onSelectedItemChange?: UseComboboxPrimitiveProps['onSelectedItemChange']; - optionTemplate?: (item: string | Item) => React.ReactNode; + onHighlightedIndexChange?: UseComboboxPrimitiveProps['onHighlightedIndexChange']; + onInputValueChange?: UseComboboxPrimitiveProps['onInputValueChange']; + onIsOpenChange?: UseComboboxPrimitiveProps['onIsOpenChange']; + onSelectedItemChange?: UseComboboxPrimitiveProps['onSelectedItemChange']; + optionTemplate?: OptionTemplateFn; groupLabelTemplate?: (groupName: string) => React.ReactNode; - selectedItem?: UseComboboxPrimitiveProps['selectedItem']; - inputValue?: UseComboboxPrimitiveProps['inputValue']; + selectedItem?: UseComboboxPrimitiveProps['selectedItem']; + inputValue?: UseComboboxPrimitiveProps['inputValue']; groupItemsBy?: string; variant?: InputVariants; - state?: Partial>; + state?: Partial>; } export interface ItemProps extends Pick {