Skip to content

Commit aee196a

Browse files
committed
fix: picker enhance generics
1 parent 3d30bbc commit aee196a

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

src/components/Pickers/Picker.tsx

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,39 @@ import {
1414

1515
export interface PickerOverrides<
1616
TValue extends any,
17-
TPickerItem extends PickerItem<TValue>
17+
TItem extends PickerItem<TValue>,
18+
TItemProps extends ItemProps<TValue, TItem & PickerItemProps>
1819
> {
1920
Root: RootProps;
20-
Item: ItemProps<TValue, TPickerItem & PickerItemProps>;
21+
Item: TItemProps;
2122
}
2223

2324
export interface ItemProps<
2425
TValue extends any,
25-
TPickerItem extends PickerItem<TValue> & PickerItemProps
26+
TItem extends PickerItem<TValue> & PickerItemProps
2627
> {
27-
item: TPickerItem;
28+
item: TItem;
2829
onSelect: () => void;
2930
}
3031

3132
export interface PickerProps<
3233
TValue extends any,
33-
TPickerItem extends PickerItem<TValue>,
34+
TItem extends PickerItem<TValue>,
35+
TItemProps extends ItemProps<TValue, TItem & PickerItemProps>,
3436
TIsMulti extends boolean = false
3537
>
3638
extends WithOverrides<
37-
UsePickerProps<TValue, TPickerItem, TIsMulti>,
38-
PickerOverrides<TValue, TPickerItem>
39+
UsePickerProps<TValue, TItem, TIsMulti>,
40+
PickerOverrides<TValue, TItem, TItemProps>
3941
> {}
4042

4143
export const Picker = <
4244
TValue extends any,
43-
TPickerItem extends PickerItem<TValue>,
45+
TItem extends PickerItem<TValue>,
46+
TItemProps extends ItemProps<TValue, TItem & PickerItemProps>,
4447
TIsMulti extends boolean = false
4548
>(
46-
props: PickerProps<TValue, TPickerItem, TIsMulti>,
49+
props: PickerProps<TValue, TItem, TItemProps, TIsMulti>,
4750
) => {
4851
const {
4952
data = [],
@@ -63,7 +66,7 @@ export const Picker = <
6366
dlv(theme, 'overrides.Picker.Root'),
6467
overrides.Root,
6568
);
66-
const [Item, tabProps] = getOverrides(
69+
const [Item, itemProps] = getOverrides(
6770
StyledItem,
6871
props,
6972
dlv(theme, 'overrides.Picker.Item'),
@@ -85,7 +88,7 @@ export const Picker = <
8588
key={item.key}
8689
onSelect={() => handleSelect(item.value, item.index, item.isSelected)}
8790
item={item}
88-
{...tabProps}
91+
{...itemProps}
8992
/>
9093
))}
9194
</Root>
@@ -118,8 +121,12 @@ const StyledRoot = (props: RootProps) => {
118121
);
119122
};
120123

121-
export const StyledItem = <TValue extends any = string>(
122-
props: ItemProps<TValue, PickerItem<TValue> & PickerItemProps>,
124+
export const StyledItem = <
125+
TValue extends any,
126+
TItem extends PickerItem<TValue>,
127+
TItemProps extends ItemProps<TValue, TItem & PickerItemProps>
128+
>(
129+
props: TItemProps,
123130
) => {
124131
const { item, onSelect } = props;
125132
const { isSelected, value } = item;

src/theme/Theme.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ export interface ThemeOverrides {
310310
Row: Overrides<any, RowOverride>;
311311
Slider: Overrides<any, SliderOverrides>;
312312
Switch: Overrides<any, SwitchOverrides>;
313-
Picker: Overrides<any, PickerOverrides<any, any>>;
313+
Picker: Overrides<any, PickerOverrides<any, any, any>>;
314314
Text: Overrides<any, TextOverride>;
315315
TextInput: Overrides<any, TextInputOverrides>;
316316
WheelPicker: Overrides<any, WheelPickerOverrides<any>>;

0 commit comments

Comments
 (0)