Skip to content

Commit 888873e

Browse files
committed
refactor(component): move type in a custom forwardRef function
Refactor component types using a custom re-typed version of forwardRef in anticipation of React 18 DSW-349
1 parent f96e860 commit 888873e

File tree

90 files changed

+449
-350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+449
-350
lines changed

packages/lumx-react/src/components/alert-dialog/AlertDialog.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { forwardRef } from 'react';
1+
import React from 'react';
22

33
import classNames from 'classnames';
44

@@ -14,11 +14,10 @@ import {
1414
Toolbar,
1515
ButtonProps,
1616
} from '@lumx/react';
17-
1817
import { mdiAlert, mdiAlertCircle, mdiCheckCircle, mdiInformation } from '@lumx/icons';
19-
import { Comp } from '@lumx/react/utils/type';
2018
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
2119
import { useId } from '@lumx/react/hooks/useId';
20+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
2221

2322
export interface AlertDialogProps extends Omit<DialogProps, 'header' | 'footer'> {
2423
/** Message variant. */
@@ -77,7 +76,7 @@ const DEFAULT_PROPS: Partial<DialogProps> = {
7776
* It should not have a complex content.
7877
* Children of this component should only be strings, paragraphs or links.
7978
*/
80-
export const AlertDialog: Comp<AlertDialogProps, HTMLDivElement> = forwardRef((props, ref) => {
79+
export const AlertDialog = forwardRef<AlertDialogProps, HTMLDivElement>((props, ref) => {
8180
const { id, title, className, cancelProps, confirmProps, kind, size, dialogProps, children, ...forwardedProps } =
8281
props;
8382

packages/lumx-react/src/components/autocomplete/Autocomplete.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
import React, { forwardRef, ReactNode, SyntheticEvent, useRef } from 'react';
1+
import React, { ReactNode, SyntheticEvent, useRef } from 'react';
22

33
import classNames from 'classnames';
44

55
import { Dropdown, DropdownProps, IconButtonProps, Offset, Placement, TextField, TextFieldProps } from '@lumx/react';
66

7-
import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
7+
import { GenericProps, HasTheme } from '@lumx/react/utils/type';
88
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
99
import { useFocus } from '@lumx/react/hooks/useFocus';
1010
import { mergeRefs } from '@lumx/react/utils/mergeRefs';
1111
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
12+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
1213

1314
/**
1415
* Defines the props of the component.
@@ -200,7 +201,7 @@ const DEFAULT_PROPS: Partial<AutocompleteProps> = {
200201
* @param ref Component ref.
201202
* @return React element.
202203
*/
203-
export const Autocomplete: Comp<AutocompleteProps, HTMLDivElement> = forwardRef((props, ref) => {
204+
export const Autocomplete = forwardRef<AutocompleteProps, HTMLDivElement>((props, ref) => {
204205
const defaultTheme = useTheme();
205206
const {
206207
anchorToInput,

packages/lumx-react/src/components/autocomplete/AutocompleteMultiple.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import React, { ReactNode } from 'react';
2+
3+
import classNames from 'classnames';
4+
15
import { mdiClose } from '@lumx/icons';
2-
import { Autocomplete, AutocompleteProps, Chip, HorizontalAlignment, Icon, Size } from '@lumx/react';
36

4-
import { Comp } from '@lumx/react/utils/type';
7+
import { Autocomplete, AutocompleteProps, Chip, HorizontalAlignment, Icon, Size } from '@lumx/react';
58
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6-
7-
import classNames from 'classnames';
8-
import React, { forwardRef, ReactNode } from 'react';
9+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
910
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
1011

1112
/**
@@ -66,7 +67,7 @@ const DEFAULT_PROPS: Partial<AutocompleteMultipleProps> = {
6667
* @param ref Component ref.
6768
* @return React element.
6869
*/
69-
export const AutocompleteMultiple: Comp<AutocompleteMultipleProps, HTMLDivElement> = forwardRef((props, ref) => {
70+
export const AutocompleteMultiple = forwardRef<AutocompleteMultipleProps, HTMLDivElement>((props, ref) => {
7071
const defaultTheme = useTheme();
7172
const {
7273
anchorToInput,

packages/lumx-react/src/components/avatar/Avatar.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import React, { forwardRef, KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';
1+
import React, { KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';
22

33
import classNames from 'classnames';
44

55
import { AspectRatio, Size, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';
66

7-
import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
7+
import { GenericProps, HasTheme } from '@lumx/react/utils/type';
88
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
99
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
10+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
1011

1112
/**
1213
* Avatar sizes.
@@ -66,7 +67,7 @@ const DEFAULT_PROPS: Partial<AvatarProps> = {
6667
* @param ref Component ref.
6768
* @return React element.
6869
*/
69-
export const Avatar: Comp<AvatarProps, HTMLDivElement> = forwardRef((props, ref) => {
70+
export const Avatar = forwardRef<AvatarProps, HTMLDivElement>((props, ref) => {
7071
const defaultTheme = useTheme() || Theme.light;
7172
const {
7273
actions,

packages/lumx-react/src/components/badge/Badge.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import React, { ReactNode } from 'react';
2+
3+
import classNames from 'classnames';
4+
15
import { ColorPalette } from '@lumx/react';
2-
import { Comp, GenericProps } from '@lumx/react/utils/type';
6+
import { GenericProps } from '@lumx/react/utils/type';
37
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
4-
import classNames from 'classnames';
5-
import React, { forwardRef, ReactNode } from 'react';
8+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
69

710
/**
811
* Defines the props of the component.
@@ -38,7 +41,7 @@ const DEFAULT_PROPS: Partial<BadgeProps> = {
3841
* @param ref Component ref.
3942
* @return React element.
4043
*/
41-
export const Badge: Comp<BadgeProps, HTMLDivElement> = forwardRef((props, ref) => {
44+
export const Badge = forwardRef<BadgeProps, HTMLDivElement>((props, ref) => {
4245
const { children, className, color, ...forwardedProps } = props;
4346
return (
4447
<div

packages/lumx-react/src/components/badge/BadgeWrapper.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import React, { ReactElement, ReactNode } from 'react';
2+
3+
import classNames from 'classnames';
4+
15
import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
26
import { DEFAULT_PROPS } from '@lumx/react/components/select/WithSelectContext';
3-
import { Comp, GenericProps } from '@lumx/react/utils/type';
4-
import classNames from 'classnames';
5-
import React, { forwardRef, ReactElement, ReactNode } from 'react';
7+
import { GenericProps } from '@lumx/react/utils/type';
8+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
69

710
export interface BadgeWrapperProps extends GenericProps {
811
/** Badge. */
@@ -21,7 +24,7 @@ const COMPONENT_NAME = 'BadgeWrapper';
2124
*/
2225
const CLASSNAME = getRootClassName(COMPONENT_NAME);
2326

24-
export const BadgeWrapper: Comp<BadgeWrapperProps, HTMLDivElement> = forwardRef((props, ref) => {
27+
export const BadgeWrapper = forwardRef<BadgeWrapperProps, HTMLDivElement>((props, ref) => {
2528
const { badge, children, className, ...forwardedProps } = props;
2629

2730
return (

packages/lumx-react/src/components/button/Button.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import React, { forwardRef, ReactNode } from 'react';
1+
import React, { ReactNode } from 'react';
22

33
import classNames from 'classnames';
44
import isEmpty from 'lodash/isEmpty';
55

66
import { Emphasis, Icon, Size, Theme, Text } from '@lumx/react';
7-
import { Comp, isComponent } from '@lumx/react/utils/type';
7+
import { isComponent } from '@lumx/react/utils/type';
88
import { getBasicClass, getRootClassName } from '@lumx/react/utils/className';
99
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
10+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
11+
1012
import { BaseButtonProps, ButtonRoot } from './ButtonRoot';
1113

1214
/**
@@ -54,7 +56,7 @@ const DEFAULT_PROPS: Partial<ButtonProps> = {
5456
* @param ref Component ref.
5557
* @return React element.
5658
*/
57-
export const Button: Comp<ButtonProps, HTMLButtonElement | HTMLAnchorElement> = forwardRef((props, ref) => {
59+
export const Button = forwardRef<ButtonProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {
5860
const defaultTheme = useTheme() || Theme.light;
5961
const { children, className, emphasis, leftIcon, rightIcon, size, theme = defaultTheme, ...forwardedProps } = props;
6062

packages/lumx-react/src/components/button/ButtonGroup.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import React, { forwardRef } from 'react';
1+
import React from 'react';
22

33
import classNames from 'classnames';
44

5-
import { Comp, GenericProps } from '@lumx/react/utils/type';
5+
import { GenericProps } from '@lumx/react/utils/type';
66
import { getRootClassName } from '@lumx/react/utils/className';
7+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
78

89
/**
910
* Defines the props of the component
@@ -32,7 +33,7 @@ const DEFAULT_PROPS: Partial<ButtonGroupProps> = {};
3233
* @param ref Component ref.
3334
* @return React element.
3435
*/
35-
export const ButtonGroup: Comp<ButtonGroupProps, HTMLDivElement> = forwardRef((props, ref) => {
36+
export const ButtonGroup = forwardRef<ButtonGroupProps, HTMLDivElement>((props, ref) => {
3637
const { children, className, ...forwardedProps } = props;
3738

3839
return (

packages/lumx-react/src/components/button/ButtonRoot.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
import React, { AriaAttributes, ButtonHTMLAttributes, DetailedHTMLProps, forwardRef, RefObject } from 'react';
1+
import React, { AriaAttributes, ButtonHTMLAttributes, DetailedHTMLProps, RefObject } from 'react';
22

33
import isEmpty from 'lodash/isEmpty';
44

55
import classNames from 'classnames';
66

77
import { ColorPalette, Emphasis, Size, Theme } from '@lumx/react';
88
import { CSS_PREFIX } from '@lumx/react/constants';
9-
import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
9+
import { GenericProps, HasTheme } from '@lumx/react/utils/type';
1010
import { handleBasicClasses } from '@lumx/react/utils/className';
1111
import { renderLink } from '@lumx/react/utils/renderLink';
12+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
1213

1314
type HTMLButtonProps = DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
1415

@@ -94,7 +95,7 @@ const renderButtonWrapper: React.FC<ButtonRootProps> = (props) => {
9495
* @param ref Component ref.
9596
* @return React element.
9697
*/
97-
export const ButtonRoot: Comp<ButtonRootProps, HTMLButtonElement | HTMLAnchorElement> = forwardRef((props, ref) => {
98+
export const ButtonRoot = forwardRef<ButtonRootProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {
9899
const {
99100
'aria-label': ariaLabel,
100101
children,

packages/lumx-react/src/components/button/IconButton.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import React, { forwardRef } from 'react';
1+
import React from 'react';
22

33
import { Emphasis, Icon, Size, Theme, Tooltip, TooltipProps } from '@lumx/react';
44
import { BaseButtonProps, ButtonRoot } from '@lumx/react/components/button/ButtonRoot';
5-
import { Comp } from '@lumx/react/utils/type';
65
import { getRootClassName } from '@lumx/react/utils/className';
76
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
7+
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
88

99
export interface IconButtonProps extends BaseButtonProps {
1010
/**
@@ -56,7 +56,7 @@ const DEFAULT_PROPS: Partial<IconButtonProps> = {
5656
* @param ref Component ref.
5757
* @return React element.
5858
*/
59-
export const IconButton: Comp<IconButtonProps, HTMLButtonElement> = forwardRef((props, ref) => {
59+
export const IconButton = forwardRef<IconButtonProps, HTMLButtonElement>((props, ref) => {
6060
const defaultTheme = useTheme() || Theme.light;
6161
const {
6262
emphasis,

0 commit comments

Comments
 (0)