Skip to content

Commit f8775d8

Browse files
SutuSebastianSutuSebastian
andauthored
fix: polymorphic component types [button, dropdown item] (#1308)
* fix: polymorphic component types [button, dropdown item] * chore: order imports * chore: order imports * fix: absolute import to relative --------- Co-authored-by: SutuSebastian <[email protected]>
1 parent 60aa2f4 commit f8775d8

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/components/Button/Button.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ElementType } from 'react';
22
import { forwardRef, type ReactNode } from 'react';
33
import { twMerge } from 'tailwind-merge';
4+
import type { PolymorphicComponentPropWithRef, PolymorphicRef } from '../../helpers/generic-as-prop';
45
import { mergeDeep } from '../../helpers/merge-deep';
56
import { getTheme } from '../../theme-store';
67
import type { DeepPartial } from '../../types';
@@ -15,7 +16,6 @@ import { Spinner } from '../Spinner';
1516
import { ButtonBase, type ButtonBaseProps } from './ButtonBase';
1617
import type { PositionInButtonGroup } from './ButtonGroup';
1718
import { ButtonGroup } from './ButtonGroup';
18-
import type { PolymorphicComponentPropWithRef, PolymorphicRef } from '../../helpers/generic-as-prop';
1919

2020
export interface FlowbiteButtonTheme {
2121
base: string;
@@ -88,11 +88,11 @@ export type ButtonProps<T extends ElementType = 'button'> = PolymorphicComponent
8888
}
8989
>;
9090

91-
type ButtonComponentType = (<C extends React.ElementType = 'button'>(
92-
props: ButtonProps<C>,
93-
) => React.ReactNode | null) & { displayName?: string };
91+
type ButtonComponentType = (<C extends ElementType = 'button'>(props: ButtonProps<C>) => JSX.Element) & {
92+
displayName?: string;
93+
};
9494

95-
const ButtonComponentFn: ButtonComponentType = forwardRef(
95+
const ButtonComponent = forwardRef(
9696
<T extends ElementType = 'button'>(
9797
{
9898
children,
@@ -168,9 +168,10 @@ const ButtonComponentFn: ButtonComponentType = forwardRef(
168168
</ButtonBase>
169169
);
170170
},
171-
);
171+
) as ButtonComponentType;
172+
173+
ButtonComponent.displayName = 'Button';
172174

173-
ButtonComponentFn.displayName = 'Button';
174-
export const Button = Object.assign(ButtonComponentFn, {
175+
export const Button = Object.assign(ButtonComponent, {
175176
Group: ButtonGroup,
176177
});

src/components/Dropdown/DropdownItem.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import { useListItem, useMergeRefs } from '@floating-ui/react';
44
import { forwardRef, type ComponentProps, type ElementType, type FC, type RefCallback } from 'react';
55
import { twMerge } from 'tailwind-merge';
6+
import type { PolymorphicComponentPropWithRef, PolymorphicRef } from '../../helpers/generic-as-prop';
67
import { mergeDeep } from '../../helpers/merge-deep';
78
import type { DeepPartial } from '../../types';
89
import { ButtonBase, type ButtonBaseProps } from '../Button/ButtonBase';
910
import { useDropdownContext } from './DropdownContext';
10-
import type { PolymorphicComponentPropWithRef, PolymorphicRef } from '~/src/helpers/generic-as-prop';
1111

1212
export interface FlowbiteDropdownItemTheme {
1313
container: string;
@@ -25,11 +25,11 @@ export type DropdownItemProps<T extends ElementType = 'button'> = PolymorphicCom
2525
}
2626
>;
2727

28-
type DropdownItemComponentType = (<C extends React.ElementType = 'button'>(
29-
props: DropdownItemProps<C>,
30-
) => React.ReactNode | null) & { displayName?: string };
28+
type DropdownItemComponentType = (<C extends ElementType = 'button'>(props: DropdownItemProps<C>) => JSX.Element) & {
29+
displayName?: string;
30+
};
3131

32-
export const DropdownItem: DropdownItemComponentType = forwardRef(
32+
export const DropdownItem = forwardRef(
3333
<T extends ElementType = 'button'>(
3434
{ children, className, icon: Icon, onClick, theme: customTheme = {}, ...props }: DropdownItemProps<T>,
3535
forwardedRef: PolymorphicRef<T>,
@@ -62,5 +62,6 @@ export const DropdownItem: DropdownItemComponentType = forwardRef(
6262
</li>
6363
);
6464
},
65-
);
65+
) as DropdownItemComponentType;
66+
6667
DropdownItem.displayName = 'DropdownItem';

0 commit comments

Comments
 (0)