Skip to content

Commit

Permalink
feat!: add forwardRef to all components that contain innerRef
Browse files Browse the repository at this point in the history
This will make us follow React best practices and depend on libraries that are expecting ref to exist
  • Loading branch information
davidacevedo committed Feb 4, 2023
1 parent 806639c commit 17a141a
Show file tree
Hide file tree
Showing 47 changed files with 51 additions and 31 deletions.
2 changes: 1 addition & 1 deletion src/Accordion.js
Expand Up @@ -62,4 +62,4 @@ function Accordion(props) {
Accordion.propTypes = propTypes;
Accordion.defaultProps = defaultProps;

export default Accordion;
export default React.forwardRef((props, ref) => <Accordion innerRef={ref} {...props} />);
4 changes: 2 additions & 2 deletions src/AccordionBody.js
Expand Up @@ -32,7 +32,7 @@ function AccordionBody(props) {
className,
cssModule,
tag: Tag,
innerRef,
innerRef = ref,
children,
accordionId,
...attributes
Expand Down Expand Up @@ -62,4 +62,4 @@ function AccordionBody(props) {
AccordionBody.propTypes = propTypes;
AccordionBody.defaultProps = defaultProps;

export default AccordionBody;
export default React.forwardRef((props, ref) => <AccordionBody innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/AccordionHeader.js
Expand Up @@ -67,4 +67,4 @@ function AccordionHeader(props) {
AccordionHeader.propTypes = propTypes;
AccordionHeader.defaultProps = defaultProps;

export default AccordionHeader;
export default React.forwardRef((props, ref) => <AccordionHeader innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/AccordionItem.js
Expand Up @@ -35,4 +35,4 @@ function AccordionItem(props) {
AccordionItem.propTypes = propTypes;
AccordionItem.defaultProps = defaultProps;

export default AccordionItem;
export default React.forwardRef((props, ref) => <AccordionItem innerRef={ref} {...props} />);
4 changes: 2 additions & 2 deletions src/Alert.js
Expand Up @@ -59,7 +59,7 @@ function Alert(props) {
children,
transition,
fade,
innerRef,
innerRef = ref,
...attributes
} = props;

Expand Down Expand Up @@ -108,4 +108,4 @@ function Alert(props) {
Alert.propTypes = propTypes;
Alert.defaultProps = defaultProps;

export default Alert;
export default React.forwardRef((props, ref) => <Alert innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Badge.js
Expand Up @@ -60,4 +60,4 @@ function Badge(props) {
Badge.propTypes = propTypes;
Badge.defaultProps = defaultProps;

export default Badge;
export default React.forwardRef((props, ref) => <Badge innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Button.js
Expand Up @@ -109,4 +109,4 @@ function Button(props) {
Button.propTypes = propTypes;
Button.defaultProps = defaultProps;

export default Button;
export default React.forwardRef((props, ref) => <Button innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Card.js
Expand Up @@ -58,4 +58,4 @@ function Card(props) {
Card.propTypes = propTypes;
Card.defaultProps = defaultProps;

export default Card;
export default React.forwardRef((props, ref) => <Card innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/CardBody.js
Expand Up @@ -34,4 +34,4 @@ function CardBody(props) {
CardBody.propTypes = propTypes;
CardBody.defaultProps = defaultProps;

export default CardBody;
export default React.forwardRef((props, ref) => <CardBody innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/CardLink.js
Expand Up @@ -31,4 +31,4 @@ function CardLink(props) {
CardLink.propTypes = propTypes;
CardLink.defaultProps = defaultProps;

export default CardLink;
export default React.forwardRef((props, ref) => <CardLink innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/CloseButton.js
Expand Up @@ -40,4 +40,4 @@ function CloseButton(props) {
CloseButton.propTypes = propTypes;
CloseButton.defaultProps = defaultProps;

export default CloseButton;
export default React.forwardRef((props, ref) => <CloseButton innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Collapse.js
Expand Up @@ -172,4 +172,4 @@ class Collapse extends Component {

Collapse.propTypes = propTypes;
Collapse.defaultProps = defaultProps;
export default Collapse;
export default React.forwardRef((props, ref) => <Collapse innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Dropdown.js
Expand Up @@ -371,4 +371,4 @@ Dropdown.propTypes = propTypes;
Dropdown.defaultProps = defaultProps;
Dropdown.contextType = InputGroupContext;

export default Dropdown;
export default React.forwardRef((props, ref) => <Dropdown innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/DropdownToggle.js
Expand Up @@ -143,4 +143,4 @@ DropdownToggle.propTypes = propTypes;
DropdownToggle.defaultProps = defaultProps;
DropdownToggle.contextType = DropdownContext;

export default DropdownToggle;
export default React.forwardRef((props, ref) => <DropdownToggle innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Fade.js
Expand Up @@ -77,4 +77,4 @@ function Fade(props) {
Fade.propTypes = propTypes;
Fade.defaultProps = defaultProps;

export default Fade;
export default React.forwardRef((props, ref) => <Fade innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Form.js
Expand Up @@ -54,4 +54,4 @@ class Form extends Component {
Form.propTypes = propTypes;
Form.defaultProps = defaultProps;

export default Form;
export default React.forwardRef((props, ref) => <Form innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Input.js
Expand Up @@ -144,4 +144,4 @@ class Input extends React.Component {
Input.propTypes = propTypes;
Input.defaultProps = defaultProps;

export default Input;
export default React.forwardRef((props, ref) => <Input innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Modal.js
Expand Up @@ -574,4 +574,4 @@ Modal.defaultProps = defaultProps;
Modal.openCount = 0;
Modal.originalBodyOverflow = null;

export default Modal;
export default React.forwardRef((props, ref) => <Modal innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/NavLink.js
Expand Up @@ -82,4 +82,4 @@ class NavLink extends React.Component {
NavLink.propTypes = propTypes;
NavLink.defaultProps = defaultProps;

export default NavLink;
export default React.forwardRef((props, ref) => <NavLink innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Offcanvas.js
Expand Up @@ -468,4 +468,4 @@ Offcanvas.propTypes = propTypes;
Offcanvas.defaultProps = defaultProps;
Offcanvas.openCount = 0;

export default Offcanvas;
export default React.forwardRef((props, ref) => <Offcanvas innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Placeholder.js
Expand Up @@ -61,4 +61,4 @@ function Placeholder(props) {
Placeholder.propTypes = propTypes;
Placeholder.defaultProps = defaultProps;

export default Placeholder;
export default React.forwardRef((props, ref) => <Placeholder innerRef={ref} {...props} />);
4 changes: 2 additions & 2 deletions src/Table.js
Expand Up @@ -50,7 +50,7 @@ function Table(props) {
responsive,
tag: Tag,
responsiveTag: ResponsiveTag,
innerRef,
innerRef = ref,
...attributes
} = props;

Expand Down Expand Up @@ -89,4 +89,4 @@ function Table(props) {
Table.propTypes = propTypes;
Table.defaultProps = defaultProps;

export default Table;
export default React.forwardRef((props, ref) => <Table innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/Toast.js
Expand Up @@ -69,4 +69,4 @@ function Toast(props) {
Toast.propTypes = propTypes;
Toast.defaultProps = defaultProps;

export default Toast;
export default React.forwardRef((props, ref) => <Toast innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/ToastBody.js
Expand Up @@ -31,4 +31,4 @@ function ToastBody(props) {
ToastBody.propTypes = propTypes;
ToastBody.defaultProps = defaultProps;

export default ToastBody;
export default React.forwardRef((props, ref) => <ToastBody innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/TooltipPopoverWrapper.js
Expand Up @@ -400,4 +400,4 @@ class TooltipPopoverWrapper extends React.Component {
TooltipPopoverWrapper.propTypes = propTypes;
TooltipPopoverWrapper.defaultProps = defaultProps;

export default TooltipPopoverWrapper;
export default React.forwardRef((props, ref) => <TooltipPopoverWrapper innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion src/UncontrolledAccordion.js
Expand Up @@ -43,4 +43,4 @@ function UncontrolledAccordion({ defaultOpen, stayOpen, ...props }) {
UncontrolledAccordion.propTypes = propTypes;
UncontrolledAccordion.defaultProps = defaultProps;

export default UncontrolledAccordion;
export default React.forwardRef((props, ref) => <UncontrolledAccordion innerRef={ref} {...props} />);
2 changes: 1 addition & 1 deletion types/lib/Accordion.d.ts
@@ -1,10 +1,10 @@
import * as React from 'react';
import { CSSModule } from './utils';

export interface AccordionProps extends React.HTMLAttributes<HTMLElement> {
tag?: React.ElementType;
cssModule?: CSSModule;
flush?: boolean;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
open: string | string[];
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/AccordionBody.d.ts
Expand Up @@ -4,6 +4,7 @@ import { CSSModule } from './utils';
export interface AccordionBodyProps extends React.HTMLAttributes<HTMLElement> {
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
accordionId: string;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/AccordionHeader.d.ts
Expand Up @@ -4,6 +4,7 @@ import { CSSModule } from './utils';
export interface AccordionHeaderProps extends React.HTMLAttributes<HTMLElement> {
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
targetId: string;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/AccordionItem.d.ts
Expand Up @@ -4,6 +4,7 @@ import { CSSModule } from './utils';
export interface AccordionItemProps extends React.HTMLAttributes<HTMLElement> {
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/Alert.d.ts
Expand Up @@ -12,6 +12,7 @@ export interface UncontrolledAlertProps
fade?: boolean;
tag?: React.ElementType;
transition?: FadeProps;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}
export interface AlertProps extends UncontrolledAlertProps {
Expand Down
1 change: 1 addition & 0 deletions types/lib/Badge.d.ts
Expand Up @@ -6,6 +6,7 @@ export interface BadgeProps extends React.HTMLAttributes<HTMLElement> {
color?: string;
pill?: boolean;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
cssModule?: CSSModule;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/Button.d.ts
Expand Up @@ -9,6 +9,7 @@ export interface ButtonProps
block?: boolean;
color?: string;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLButtonElement>;
size?: string;
cssModule?: CSSModule;
Expand Down
1 change: 1 addition & 0 deletions types/lib/Card.d.ts
Expand Up @@ -9,6 +9,7 @@ export interface CardProps extends React.HTMLAttributes<HTMLElement> {
body?: boolean;
outline?: boolean;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/CardBody.d.ts
Expand Up @@ -5,6 +5,7 @@ export interface CardBodyProps extends React.HTMLAttributes<HTMLElement> {
[key: string]: any;
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/CardLink.d.ts
Expand Up @@ -5,6 +5,7 @@ export interface CardLinkProps
extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
[key: string]: any;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLAnchorElement>;
cssModule?: CSSModule;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/Collapse.d.ts
Expand Up @@ -19,6 +19,7 @@ export interface CollapseProps extends React.HTMLAttributes<HTMLElement> {
onExit?: () => void;
onExiting?: () => void;
onExited?: () => void;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/Fade.d.ts
Expand Up @@ -16,6 +16,7 @@ export interface FadeProps extends React.HTMLAttributes<HTMLElement> {
transitionLeave?: boolean;
onLeave?: () => void;
onEnter?: () => void;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/Form.d.ts
Expand Up @@ -4,6 +4,7 @@ import { CSSModule } from './utils';
export interface FormProps extends React.FormHTMLAttributes<HTMLFormElement> {
[key: string]: any;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLFormElement>;
cssModule?: CSSModule;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/Input.d.ts
Expand Up @@ -37,6 +37,7 @@ export interface InputProps
valid?: boolean;
invalid?: boolean;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLInputElement | HTMLTextAreaElement>;
plaintext?: boolean;
addon?: boolean;
Expand Down
1 change: 1 addition & 0 deletions types/lib/Modal.d.ts
Expand Up @@ -31,6 +31,7 @@ export interface ModalProps extends React.HTMLAttributes<HTMLElement> {
unmountOnClose?: boolean;
returnFocusAfterClose?: boolean;
container?: string | HTMLElement | React.RefObject<HTMLElement>;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
trapFocus?: boolean;
}
Expand Down
1 change: 1 addition & 0 deletions types/lib/NavLink.d.ts
Expand Up @@ -5,6 +5,7 @@ export interface NavLinkProps
extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
[key: string]: any;
tag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLAnchorElement>;
disabled?: boolean;
active?: boolean;
Expand Down
1 change: 1 addition & 0 deletions types/lib/Offcanvas.d.ts
Expand Up @@ -14,6 +14,7 @@ export interface OffcanvasProps extends React.HTMLAttributes<HTMLElement> {
contentClassName?: string;
cssModule?: CSSModule;
fade?: boolean;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
isOpen?: boolean;
keyboard?: boolean;
Expand Down
3 changes: 2 additions & 1 deletion types/lib/Placeholder.d.ts
Expand Up @@ -10,8 +10,9 @@ export interface PlaceholderProps extends React.HTMLAttributes<HTMLElement> {
cssModule?: CSSModule;
size?: string;
widths?: string[];
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

declare class Placeholder extends React.Component<PlaceholderProps> {}
export default Placeholder;
export default Placeholder;
1 change: 1 addition & 0 deletions types/lib/Table.d.ts
Expand Up @@ -15,6 +15,7 @@ export interface TableProps
responsive?: boolean | string;
tag?: React.ElementType;
responsiveTag?: React.ElementType;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLTableElement>;
}

Expand Down
1 change: 1 addition & 0 deletions types/lib/Toast.d.ts
Expand Up @@ -6,6 +6,7 @@ export interface ToastProps extends React.HTMLAttributes<HTMLElement> {
[key: string]: any;
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
isOpen?: boolean;
fade?: boolean;
Expand Down
1 change: 1 addition & 0 deletions types/lib/ToastBody.d.ts
Expand Up @@ -5,6 +5,7 @@ export interface ToastBodyProps extends React.HTMLAttributes<HTMLElement> {
[key: string]: any;
tag?: React.ElementType;
cssModule?: CSSModule;
ref?: React.Ref<HTMLElement>;
innerRef?: React.Ref<HTMLElement>;
}

Expand Down

0 comments on commit 17a141a

Please sign in to comment.