From 73e882ed631afe6d9bb41706b2f0dd81f12a162e Mon Sep 17 00:00:00 2001 From: Joan Perals Tresserra Date: Fri, 7 Nov 2025 14:41:01 +0100 Subject: [PATCH] chore: Refactor radio button into internal component --- .../__snapshots__/documenter.test.ts.snap | 4 +- .../test-utils-selectors.test.tsx.snap | 4 +- .../components/radio-button/index.tsx} | 36 ++--- .../components/radio-button/interfaces.ts | 143 ++++++++++++++++++ .../components/radio-button/styles.scss | 57 +++++++ .../radio-button/test-classes/styles.scss | 8 + src/radio-group/__integ__/radio-group.test.ts | 8 +- .../__tests__/radio-group.test.tsx | 6 +- src/radio-group/interfaces.ts | 53 +------ src/radio-group/internal.tsx | 23 ++- src/radio-group/styles.scss | 57 +------ src/radio-group/test-classes/styles.scss | 8 + src/table/selection/selection-control.tsx | 4 +- src/test-utils/dom/radio-group/index.ts | 5 +- .../dom/radio-group/radio-button.ts | 4 + src/tiles/tile.tsx | 7 +- 16 files changed, 276 insertions(+), 151 deletions(-) rename src/{radio-group/radio-button.tsx => internal/components/radio-button/index.tsx} (79%) create mode 100644 src/internal/components/radio-button/interfaces.ts create mode 100644 src/internal/components/radio-button/styles.scss create mode 100644 src/internal/components/radio-button/test-classes/styles.scss create mode 100644 src/radio-group/test-classes/styles.scss diff --git a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap index fbbff76536..89d469dd23 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap @@ -20111,7 +20111,7 @@ being included in a form submission. A read-only control is still focusable.", }, { "inlineType": { - "name": "RadioGroupProps.Style", + "name": "RadioButtonProps.Style", "properties": [ { "inlineType": { @@ -20336,7 +20336,7 @@ being included in a form submission. A read-only control is still focusable.", "systemTags": [ "core", ], - "type": "RadioGroupProps.Style", + "type": "RadioButtonProps.Style", }, { "description": "Sets the value of the selected radio button. diff --git a/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap b/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap index 47986281f0..1f5a3b96d7 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap @@ -389,6 +389,7 @@ exports[`test-utils selectors 1`] = ` "awsui_placeholder_18eso", "awsui_recovery_vrgzu", "awsui_root_11n0s", + "awsui_root_15oj2", "awsui_root_1fcus", "awsui_root_1kjc7", "awsui_root_1om0h", @@ -514,8 +515,7 @@ exports[`test-utils selectors 1`] = ` "awsui_token-editor-token-remove-actions_1heb1", ], "radio-group": [ - "awsui_radio_1mabk", - "awsui_root_1mabk", + "awsui_root_1np5w", ], "s3-resource-selector": [ "awsui_alert_1u0yw", diff --git a/src/radio-group/radio-button.tsx b/src/internal/components/radio-button/index.tsx similarity index 79% rename from src/radio-group/radio-button.tsx rename to src/internal/components/radio-button/index.tsx index 99327a87be..31658cbd26 100644 --- a/src/radio-group/radio-button.tsx +++ b/src/internal/components/radio-button/index.tsx @@ -7,26 +7,20 @@ import { useMergeRefs } from '@cloudscape-design/component-toolkit/internal'; import { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal'; import { copyAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata'; -import AbstractSwitch from '../internal/components/abstract-switch'; -import { fireNonCancelableEvent, NonCancelableEventHandler } from '../internal/events'; -import { RadioGroupProps } from './interfaces'; -import { getAbstractSwitchStyles, getInnerCircleStyle, getOuterCircleStyle } from './style'; +import { getAbstractSwitchStyles, getInnerCircleStyle, getOuterCircleStyle } from '../../../radio-group/style'; +import { getBaseProps } from '../../base-component'; +import AbstractSwitch from '../../components/abstract-switch'; +import { fireNonCancelableEvent } from '../../events'; +import { InternalBaseComponentProps } from '../../hooks/use-base-component'; +import { RadioButtonProps } from './interfaces'; import styles from './styles.css.js'; - -interface RadioButtonProps extends RadioGroupProps.RadioButtonDefinition { - name: string; - checked: boolean; - onChange?: NonCancelableEventHandler; - readOnly?: boolean; - className?: string; - style?: RadioGroupProps.Style; -} +import testUtilStyles from './test-classes/styles.css.js'; export default React.forwardRef(function RadioButton( { name, - label, + children, value, checked, description, @@ -37,25 +31,28 @@ export default React.forwardRef(function RadioButton( className, style, ...rest - }: RadioButtonProps, + }: RadioButtonProps & InternalBaseComponentProps, ref: React.Ref ) { const radioButtonRef = useRef(null); const mergedRefs = useMergeRefs(radioButtonRef, ref); const { tabIndex } = useSingleTabStopNavigation(radioButtonRef); + const baseProps = getBaseProps(rest); return ( ( { radioButtonRef.current?.focus(); - if (checked) { - return; - } - fireNonCancelableEvent(onChange, { value }); + fireNonCancelableEvent(onChange, { checked: !checked }); }} styledControl={
{item.image}
}