Skip to content

Commit d0396dc

Browse files
committed
fix: controlled tag component for selected prop carbon-design-system#19228
1 parent c60111b commit d0396dc

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

packages/react/src/components/Tag/SelectableTag.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import React, {
1313
MouseEvent,
1414
forwardRef,
1515
ForwardedRef,
16+
useEffect,
1617
} from 'react';
1718
import classNames from 'classnames';
1819
import { useId } from '../../internal/useId';
@@ -101,6 +102,12 @@ const SelectableTag = forwardRef(
101102
});
102103
const [isEllipsisApplied, setIsEllipsisApplied] = useState(false);
103104

105+
useEffect(() => {
106+
if (selected !== selectedTag) {
107+
setSelectedTag(selected);
108+
}
109+
}, [selected]);
110+
104111
useLayoutEffect(() => {
105112
const newElement = tagRef.current?.getElementsByClassName(
106113
`${prefix}--tag__label`

packages/react/src/components/Tag/Tag-test.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright IBM Corp. 2016, 2023
2+
* Copyright IBM Corp. 2016, 2025
33
*
44
* This source code is licensed under the Apache-2.0 license found in the
55
* LICENSE file in the root directory of this source tree.
@@ -308,4 +308,19 @@ describe('Tag', () => {
308308
render(<SelectableTag type="red" text="Test Tag" ref={ref} />);
309309
expect(ref.current).toBeInstanceOf(HTMLButtonElement);
310310
});
311+
it('Controlled selected tag', () => {
312+
const ref = React.createRef();
313+
const { rerender } = render(
314+
<SelectableTag type="red" text="Test Tag" ref={ref} selected={true} />
315+
);
316+
expect(ref.current).toBeInstanceOf(HTMLButtonElement);
317+
expect(selectableTag).toHaveClass(`${prefix}--tag--selectable-selected`);
318+
319+
rerender(
320+
<SelectableTag type="red" text="Test Tag" ref={ref} selected={false} />
321+
);
322+
expect(selectableTag).container.toHaveClass(
323+
`${prefix}--tag--selectable-selected`
324+
);
325+
});
311326
});

0 commit comments

Comments
 (0)