Skip to content

Commit b151efd

Browse files
authored
fix: TS Strict errors on toggleButton primitive (#3454)
1 parent 8e33c52 commit b151efd

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

.changeset/shaggy-rocks-grow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@aws-amplify/ui-react": patch
3+
---
4+
5+
fix: TS Strict errors on toggleButton primitive
Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react';
2-
import { isFunction } from '@aws-amplify/ui';
2+
import { isFunction, isString } from '@aws-amplify/ui';
33

4-
import { ToggleButtonProps, ToggleButtonGroupProps } from '../types';
4+
import { ToggleButtonGroupProps } from '../types';
55

66
type UseToggleButtonParams = Pick<
77
ToggleButtonGroupProps,
@@ -13,16 +13,18 @@ export const useToggleButtonGroup = ({
1313
value,
1414
isExclusive = false,
1515
isSelectionRequired = false,
16-
}: UseToggleButtonParams): ((value: string) => void) => {
16+
}: UseToggleButtonParams): ((value: string | undefined) => void) => {
1717
// Multiple selection
18-
const handleChange: ToggleButtonProps['onChange'] = React.useCallback(
18+
const handleChange = React.useCallback<
19+
(buttonValue: string | undefined) => void
20+
>(
1921
(buttonValue) => {
2022
if (!isFunction(onChange) || !Array.isArray(value)) {
2123
return;
2224
}
2325

24-
const index = value.indexOf(buttonValue);
25-
let newValue: string[];
26+
const index = isString(buttonValue) ? value.indexOf(buttonValue) : -1;
27+
let newValue: Array<string | undefined>;
2628

2729
const shouldToggleOff = index >= 0;
2830
if (shouldToggleOff) {
@@ -42,19 +44,19 @@ export const useToggleButtonGroup = ({
4244
);
4345

4446
// Exclusive selection
45-
const handleExclusiveChange: ToggleButtonProps['onChange'] =
46-
React.useCallback(
47-
(buttonValue) => {
48-
if (!isFunction(onChange)) {
49-
return;
50-
}
51-
52-
onChange(
53-
value === buttonValue && !isSelectionRequired ? null : buttonValue
54-
);
55-
},
56-
[onChange, value, isSelectionRequired]
57-
);
47+
const handleExclusiveChange = React.useCallback<
48+
(buttonValue: string | undefined) => void
49+
>(
50+
(buttonValue) => {
51+
if (!isFunction(onChange)) {
52+
return;
53+
}
54+
onChange(
55+
value === buttonValue && !isSelectionRequired ? undefined : buttonValue
56+
);
57+
},
58+
[onChange, value, isSelectionRequired]
59+
);
5860

5961
return isExclusive ? handleExclusiveChange : handleChange;
6062
};

packages/react/src/primitives/types/toggleButton.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ export interface ToggleButtonProps extends ButtonProps {
2323
* @description
2424
* Handles changes to the current value when using the ToggleButton as a controlled component
2525
*/
26-
onChange?: (value: string) => void;
26+
onChange?: (value: string | undefined) => void;
2727
}

packages/react/src/primitives/types/toggleButtonGroup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ export interface ToggleButtonGroupProps
3434
* @description
3535
* Handles changes to the current value when using the ToggleButtonGroup as a controlled component
3636
*/
37-
onChange: (value: string | string[]) => void;
37+
onChange: (value: string | (string | undefined)[] | undefined) => void;
3838
}

0 commit comments

Comments
 (0)