Skip to content

Commit c1bf1f7

Browse files
committed
fix: forwardRef render functions not using ref
1 parent c6326d1 commit c1bf1f7

File tree

9 files changed

+29
-12
lines changed

9 files changed

+29
-12
lines changed

packages/components/dropdown/src/dropdown-trigger.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {forwardRef} from "@nextui-org/system";
1+
import {wrapForwardRefTypes} from "@nextui-org/system";
22
import {PopoverTrigger} from "@nextui-org/popover";
33

44
import {useDropdownContext} from "./dropdown-context";
@@ -11,7 +11,7 @@ export interface DropdownTriggerProps {
1111
* DropdownTrigger opens the popover's content. It must be an interactive element
1212
* such as `button` or `a`.
1313
*/
14-
const DropdownTrigger = forwardRef<"button", DropdownTriggerProps>((props, _) => {
14+
const DropdownTrigger = wrapForwardRefTypes<"button", DropdownTriggerProps>((props, _) => {
1515
const {getMenuTriggerProps} = useDropdownContext();
1616

1717
const {children, ...otherProps} = props;

packages/components/listbox/src/listbox-item.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useMemo, ReactNode} from "react";
2-
import {forwardRef} from "@nextui-org/system";
2+
import {wrapForwardRefTypes} from "@nextui-org/system";
33

44
import {UseListboxItemProps, useListboxItem} from "./use-listbox-item";
55
import {ListboxSelectedIcon} from "./listbox-selected-icon";
@@ -9,7 +9,7 @@ export interface ListboxItemProps<T extends object = object> extends UseListboxI
99
/**
1010
* @internal
1111
*/
12-
const ListboxItem = forwardRef<"li", ListboxItemProps>((props, _) => {
12+
const ListboxItem = wrapForwardRefTypes<"li", ListboxItemProps>((props) => {
1313
const {
1414
Component,
1515
rendered,

packages/components/menu/src/menu-item.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useMemo, ReactNode} from "react";
2-
import {forwardRef} from "@nextui-org/system";
2+
import {wrapForwardRefTypes} from "@nextui-org/system";
33

44
import {UseMenuItemProps, useMenuItem} from "./use-menu-item";
55
import {MenuSelectedIcon} from "./menu-selected-icon";
@@ -9,7 +9,7 @@ export interface MenuItemProps<T extends object = object> extends UseMenuItemPro
99
/**
1010
* @internal
1111
*/
12-
const MenuItem = forwardRef<"li", MenuItemProps>((props, _) => {
12+
const MenuItem = wrapForwardRefTypes<"li", MenuItemProps>((props) => {
1313
const {
1414
Component,
1515
slots,

packages/components/modal/src/modal-content.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type {AriaDialogProps} from "@react-aria/dialog";
22
import type {HTMLMotionProps} from "framer-motion";
33

44
import {cloneElement, isValidElement, ReactNode, useMemo, useCallback} from "react";
5-
import {forwardRef} from "@nextui-org/system";
5+
import {wrapForwardRefTypes} from "@nextui-org/system";
66
import {DismissButton} from "@react-aria/overlays";
77
import {TRANSITION_VARIANTS} from "@nextui-org/framer-utils";
88
import {CloseIcon} from "@nextui-org/shared-icons";
@@ -23,7 +23,7 @@ export interface ModalContentProps extends AriaDialogProps, HTMLNextUIProps<"div
2323

2424
const domAnimation = () => import("@nextui-org/dom-animation").then((res) => res.default);
2525

26-
const ModalContent = forwardRef<"div", ModalContentProps, KeysToOmit>((props, _) => {
26+
const ModalContent = wrapForwardRefTypes<"div", ModalContentProps, KeysToOmit>((props) => {
2727
const {as, children, role = "dialog", ...otherProps} = props;
2828

2929
const {

packages/components/popover/src/popover-content.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type {AriaDialogProps} from "@react-aria/dialog";
22
import type {HTMLMotionProps} from "framer-motion";
33

44
import {DOMAttributes, ReactNode, useMemo, useRef} from "react";
5-
import {forwardRef} from "@nextui-org/system";
5+
import {wrapForwardRefTypes} from "@nextui-org/system";
66
import {RemoveScroll} from "react-remove-scroll";
77
import {DismissButton} from "@react-aria/overlays";
88
import {TRANSITION_VARIANTS} from "@nextui-org/framer-utils";
@@ -21,7 +21,7 @@ export interface PopoverContentProps
2121

2222
const domAnimation = () => import("@nextui-org/dom-animation").then((res) => res.default);
2323

24-
const PopoverContent = forwardRef<"div", PopoverContentProps>((props, _) => {
24+
const PopoverContent = wrapForwardRefTypes<"div", PopoverContentProps>((props) => {
2525
const {as, children, className, ...otherProps} = props;
2626

2727
const {

packages/components/popover/src/popover-trigger.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, {Children, cloneElement, useMemo} from "react";
2-
import {forwardRef} from "@nextui-org/system";
2+
import {wrapForwardRefTypes} from "@nextui-org/system";
33
import {pickChildren} from "@nextui-org/react-utils";
44
import {useAriaButton} from "@nextui-org/use-aria-button";
55
import {Button} from "@nextui-org/button";
@@ -15,7 +15,7 @@ export interface PopoverTriggerProps {
1515
* PopoverTrigger opens the popover's content. It must be an interactive element
1616
* such as `button` or `a`.
1717
*/
18-
const PopoverTrigger = forwardRef<"button", PopoverTriggerProps>((props, _) => {
18+
const PopoverTrigger = wrapForwardRefTypes<"button", PopoverTriggerProps>((props) => {
1919
const {triggerRef, getTriggerProps} = usePopoverContext();
2020

2121
const {children, ...otherProps} = props;

packages/core/system-rsc/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export {
2121
mapPropsVariants,
2222
mapPropsVariantsWithCommon,
2323
isNextUIEl,
24+
wrapForwardRefTypes,
2425
} from "./utils";
2526

2627
export {extendVariants} from "./extend-variants";

packages/core/system-rsc/src/utils.ts

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,21 @@ export function forwardRef<
1818
return baseForwardRef(component) as InternalForwardRefRenderFunction<Component, Props, OmitKeys>;
1919
}
2020

21+
export function wrapForwardRefTypes<
22+
Component extends As,
23+
Props extends object,
24+
OmitKeys extends keyof any = never,
25+
>(
26+
component: React.ForwardRefRenderFunction<
27+
any,
28+
RightJoinProps<PropsOf<Component>, Props> & {
29+
as?: As;
30+
}
31+
>,
32+
) {
33+
return component as InternalForwardRefRenderFunction<Component, Props, OmitKeys>;
34+
}
35+
2136
export const toIterator = (obj: any) => {
2237
return {
2338
...obj,

packages/core/system/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export {
2525
mapPropsVariantsWithCommon,
2626
isNextUIEl,
2727
extendVariants,
28+
wrapForwardRefTypes,
2829
} from "@nextui-org/system-rsc";
2930

3031
export type {SupportedCalendars} from "./types";

0 commit comments

Comments
 (0)