From a5bc3a6a00b6931d7c67a9485de7f3ffaa112282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlia=20Jaeger=20Foresti?= <60678893+juliajforesti@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:07:29 -0300 Subject: [PATCH] fix(fuselage): `SelectAria` id prop overwriting (#1533) Co-authored-by: Douglas Fabris --- .changeset/old-shrimps-lick.md | 5 ++ .../src/components/Select/SelectAria.tsx | 74 +++++++------------ .../src/components/Select/SelectTrigger.tsx | 45 +++++++++++ 3 files changed, 78 insertions(+), 46 deletions(-) create mode 100644 .changeset/old-shrimps-lick.md create mode 100644 packages/fuselage/src/components/Select/SelectTrigger.tsx diff --git a/.changeset/old-shrimps-lick.md b/.changeset/old-shrimps-lick.md new file mode 100644 index 0000000000..fa44ecc32e --- /dev/null +++ b/.changeset/old-shrimps-lick.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/fuselage': patch +--- + +fix(fuselage): SelectAria id prop overwriting diff --git a/packages/fuselage/src/components/Select/SelectAria.tsx b/packages/fuselage/src/components/Select/SelectAria.tsx index 3c7c56c40e..775daf3e10 100644 --- a/packages/fuselage/src/components/Select/SelectAria.tsx +++ b/packages/fuselage/src/components/Select/SelectAria.tsx @@ -2,13 +2,7 @@ import type { AriaSelectProps } from '@react-types/select'; import { useMergedRefs, useResizeObserver } from '@rocket.chat/fuselage-hooks'; import type { AllHTMLAttributes, Key, Ref } from 'react'; import { forwardRef } from 'react'; -import { - useSelect, - HiddenSelect, - useButton, - mergeProps, - useFocusRing, -} from 'react-aria'; +import { useSelect, HiddenSelect, mergeProps, useFocusRing } from 'react-aria'; import { useSelectState } from 'react-stately'; import Box from '../Box/Box'; @@ -17,9 +11,18 @@ import { OptionContainer } from '../Options'; import { Popover } from '../Popover'; import { ListBox } from './Listbox'; +import { SelectTrigger } from './SelectTrigger'; export { Item } from 'react-stately'; +type SelectAriaProps = AriaSelectProps & { + error?: string; + placeholder?: string; + value?: Key | null; + onChange?: (key: Key) => void; + small?: boolean; +}; + export const SelectAria = forwardRef(function SelectAria( { error, @@ -29,14 +32,9 @@ export const SelectAria = forwardRef(function SelectAria( small, isDisabled: isDisabledProps, disabled, + id, ...props - }: Omit, 'value' | 'onChange'> & { - error?: string; - placeholder?: string; - value?: Key | null; - onChange?: ((key: Key) => any) | undefined; - small?: boolean; - } & AllHTMLAttributes, + }: SelectAriaProps & AllHTMLAttributes, outerRef: Ref, ) { const isDisabled = isDisabledProps || disabled; @@ -49,6 +47,7 @@ export const SelectAria = forwardRef(function SelectAria( }); const { ref, borderBoxSize } = useResizeObserver(); + const mergedRef = useMergedRefs(outerRef, ref); const { triggerProps, valueProps, menuProps } = useSelect( { isDisabled, ...props }, @@ -56,56 +55,39 @@ export const SelectAria = forwardRef(function SelectAria( ref, ); - const { buttonProps } = useButton(triggerProps, ref); - const { focusProps, isFocusVisible } = useFocusRing(); - const mergedRef = useMergedRefs(outerRef, ref); - return ( <> - + - {state.selectedItem ? state.selectedItem.rendered : placeholder} - - + {state.isOpen && ( ; + +export const SelectTrigger = forwardRef( + ({ small, error, isDisabled, focus, id, ...props }, ref) => { + const { buttonProps } = useButton( + props, + ref as RefObject, + ); + + return ( + + {props.children} + + ); + }, +);