Allow disabled dropdown menu items to be focused (#36078)
Some checks failed
Check i18n / check-i18n (push) Waiting to run
Chromatic / Run Chromatic (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
JavaScript Linting / lint (push) Waiting to run
Ruby Linting / lint (push) Waiting to run
JavaScript Testing / test (push) Waiting to run
Historical data migration test / test (14-alpine) (push) Waiting to run
Historical data migration test / test (15-alpine) (push) Waiting to run
Historical data migration test / test (16-alpine) (push) Waiting to run
Historical data migration test / test (17-alpine) (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
CSS Linting / lint (push) Has been cancelled

This commit is contained in:
diondiondion 2025-09-10 13:32:50 +02:00 committed by GitHub
parent ffaa672fd6
commit 841212710b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 9 deletions

View File

@ -186,13 +186,16 @@ export const DropdownMenu = <Item = MenuItem,>({
(e: React.MouseEvent | React.KeyboardEvent) => {
const i = Number(e.currentTarget.getAttribute('data-index'));
const item = items?.[i];
const isItemDisabled = Boolean(
item && typeof item === 'object' && 'disabled' in item && item.disabled,
);
onClose();
if (!item) {
if (!item || isItemDisabled) {
return;
}
onClose();
if (typeof onItemClick === 'function') {
e.preventDefault();
onItemClick(item, i);
@ -233,7 +236,7 @@ export const DropdownMenu = <Item = MenuItem,>({
onClick={handleItemClick}
onKeyUp={handleItemKeyUp}
data-index={i}
disabled={disabled}
aria-disabled={disabled}
>
<DropdownMenuItemContent item={option} />
</button>
@ -320,7 +323,7 @@ export const DropdownMenu = <Item = MenuItem,>({
);
};
interface DropdownProps<Item = MenuItem> {
interface DropdownProps<Item extends object | null = MenuItem> {
children?: React.ReactElement;
icon?: string;
iconComponent?: IconProp;
@ -348,7 +351,7 @@ interface DropdownProps<Item = MenuItem> {
const offset = [5, 5] as OffsetValue;
const popperConfig = { strategy: 'fixed' } as UsePopperOptions;
export const Dropdown = <Item = MenuItem,>({
export const Dropdown = <Item extends object | null = MenuItem>({
children,
icon,
iconComponent,

View File

@ -180,7 +180,7 @@ const ReblogMenuItem: FC<ReblogMenuItemProps> = ({
<button
{...handlers}
ref={focusRefCallback}
disabled={disabled}
aria-disabled={disabled}
data-index={index}
>
<DropdownMenuItemContent item={item} />

View File

@ -2908,16 +2908,23 @@ a.account__display-name {
&:focus,
&:hover,
&:active {
&:not(:disabled) {
&:not(:disabled, [aria-disabled='true']) {
background: var(--dropdown-border-color);
outline: 0;
}
}
}
button:disabled {
button:disabled,
button[aria-disabled='true'] {
color: $dark-text-color;
cursor: default;
&:focus {
color: rgb(from $dark-text-color r g b / 70%);
background: var(--dropdown-border-color);
outline: 0;
}
}
}