Skip to content

Commit 5687992

Browse files
chore: Make disabled selected multiselect tokens readonly (#3636)
1 parent 7728344 commit 5687992

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

pages/multiselect/select-all.page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const groupedOptionsWithDisabledOptions: MultiselectProps.Options = [
3333
const initialSelectedOptions = [
3434
(groupedOptionsWithDisabledOptions[0] as OptionGroup).options[2],
3535
(groupedOptionsWithDisabledOptions[1] as OptionGroup).options[0],
36+
(groupedOptionsWithDisabledOptions[1] as OptionGroup).options[1],
3637
];
3738

3839
export default function MultiselectPage() {

src/multiselect/__tests__/analytics-metadata.test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ describe('Multiselect renders correct analytics metadata', () => {
276276
});
277277

278278
const disabledToken = wrapper.findToken(3)!.findDismiss().getElement();
279-
expect(getGeneratedAnalyticsMetadata(disabledToken)).toEqual(getMetadataContexts(5));
279+
expect(getGeneratedAnalyticsMetadata(disabledToken)).toEqual({
280+
detail: { position: '3' },
281+
...getMetadataContexts(5),
282+
});
280283
});
281284

282285
test('in show more', () => {

src/multiselect/internal.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ type InternalMultiselectProps = SomeRequired<
3131
> &
3232
InternalBaseComponentProps;
3333

34+
type ExtendedToken = TokenGroupProps.Item & { _readOnly: boolean };
35+
3436
const InternalMultiselect = React.forwardRef(
3537
(
3638
{
@@ -116,9 +118,9 @@ const InternalMultiselect = React.forwardRef(
116118
/>
117119
);
118120

119-
const tokens: TokenGroupProps['items'] = selectedOptions.map(option => ({
121+
const tokens: Array<ExtendedToken> = selectedOptions.map(option => ({
120122
label: option.label,
121-
disabled: disabled || option.disabled,
123+
disabled,
122124
labelTag: option.labelTag,
123125
description: option.description,
124126
iconAlt: option.iconAlt,
@@ -129,6 +131,7 @@ const InternalMultiselect = React.forwardRef(
129131
dismissLabel: i18n('deselectAriaLabel', deselectAriaLabel?.(option), format =>
130132
format({ option__label: option.label ?? '' })
131133
),
134+
_readOnly: !!option.disabled,
132135
}));
133136

134137
const ListComponent = virtualScroll ? VirtualList : PlainList;
@@ -200,6 +203,7 @@ const InternalMultiselect = React.forwardRef(
200203
limitShowFewerAriaLabel={tokenLimitShowFewerAriaLabel}
201204
disableOuterPadding={true}
202205
readOnly={readOnly}
206+
isItemReadOnly={item => (item as ExtendedToken)._readOnly}
203207
/>
204208
)}
205209

src/token-group/internal.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import { Token } from './token';
2020
import tokenListStyles from '../internal/components/token-list/styles.css.js';
2121
import styles from './styles.css.js';
2222

23-
type InternalTokenGroupProps = SomeRequired<TokenGroupProps, 'items' | 'alignment'> & InternalBaseComponentProps;
23+
type InternalTokenGroupProps = SomeRequired<TokenGroupProps, 'items' | 'alignment'> &
24+
InternalBaseComponentProps & {
25+
isItemReadOnly?: (item: TokenGroupProps.Item) => boolean;
26+
};
2427

2528
export default function InternalTokenGroup({
2629
alignment,
@@ -32,6 +35,7 @@ export default function InternalTokenGroup({
3235
limitShowFewerAriaLabel,
3336
limitShowMoreAriaLabel,
3437
readOnly,
38+
isItemReadOnly,
3539
__internalRootRef,
3640
...props
3741
}: InternalTokenGroupProps) {
@@ -75,7 +79,7 @@ export default function InternalTokenGroup({
7579
setNextFocusIndex(itemIndex);
7680
}}
7781
disabled={item.disabled}
78-
readOnly={readOnly}
82+
readOnly={readOnly || isItemReadOnly?.(item)}
7983
{...(item.disabled || readOnly
8084
? {}
8185
: getAnalyticsMetadataAttribute({ detail: { position: `${itemIndex + 1}` } }))}

0 commit comments

Comments
 (0)