mirror of https://github.com/vector-im/riot-web
				
				
				
			Fix instances of decorated room avatar wrongly having their own tabIndex (#7730)
							parent
							
								
									5278679076
								
							
						
					
					
						commit
						4501308b47
					
				| 
						 | 
					@ -21,11 +21,11 @@ import { UPDATE_EVENT } from "../../../stores/AsyncStore";
 | 
				
			||||||
import { MenuItem } from "../../structures/ContextMenu";
 | 
					import { MenuItem } from "../../structures/ContextMenu";
 | 
				
			||||||
import { useEventEmitterState } from "../../../hooks/useEventEmitter";
 | 
					import { useEventEmitterState } from "../../../hooks/useEventEmitter";
 | 
				
			||||||
import { _t } from "../../../languageHandler";
 | 
					import { _t } from "../../../languageHandler";
 | 
				
			||||||
import RoomAvatar from "../avatars/RoomAvatar";
 | 
					 | 
				
			||||||
import dis from "../../../dispatcher/dispatcher";
 | 
					import dis from "../../../dispatcher/dispatcher";
 | 
				
			||||||
import InteractiveTooltip, { Direction } from "../elements/InteractiveTooltip";
 | 
					import InteractiveTooltip, { Direction } from "../elements/InteractiveTooltip";
 | 
				
			||||||
import { roomContextDetailsText } from "../../../Rooms";
 | 
					import { roomContextDetailsText } from "../../../Rooms";
 | 
				
			||||||
import { Action } from "../../../dispatcher/actions";
 | 
					import { Action } from "../../../dispatcher/actions";
 | 
				
			||||||
 | 
					import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const RecentlyViewedButton = () => {
 | 
					const RecentlyViewedButton = () => {
 | 
				
			||||||
    const tooltipRef = useRef<InteractiveTooltip>();
 | 
					    const tooltipRef = useRef<InteractiveTooltip>();
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ const RecentlyViewedButton = () => {
 | 
				
			||||||
                        tooltipRef.current?.hideTooltip();
 | 
					                        tooltipRef.current?.hideTooltip();
 | 
				
			||||||
                    }}
 | 
					                    }}
 | 
				
			||||||
                >
 | 
					                >
 | 
				
			||||||
                    <RoomAvatar room={crumb} width={24} height={24} />
 | 
					                    <DecoratedRoomAvatar room={crumb} avatarSize={24} tooltipProps={{ tabIndex: -1 }} />
 | 
				
			||||||
                    <span className="mx_RecentlyViewedButton_entry_label">
 | 
					                    <span className="mx_RecentlyViewedButton_entry_label">
 | 
				
			||||||
                        <div>{ crumb.name }</div>
 | 
					                        <div>{ crumb.name }</div>
 | 
				
			||||||
                        { contextDetails && <div className="mx_RecentlyViewedButton_entry_spaces">
 | 
					                        { contextDetails && <div className="mx_RecentlyViewedButton_entry_spaces">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,10 +24,11 @@ import { _t } from "../../../languageHandler";
 | 
				
			||||||
import defaultDispatcher from "../../../dispatcher/dispatcher";
 | 
					import defaultDispatcher from "../../../dispatcher/dispatcher";
 | 
				
			||||||
import Analytics from "../../../Analytics";
 | 
					import Analytics from "../../../Analytics";
 | 
				
			||||||
import { UPDATE_EVENT } from "../../../stores/AsyncStore";
 | 
					import { UPDATE_EVENT } from "../../../stores/AsyncStore";
 | 
				
			||||||
import { RovingAccessibleTooltipButton } from "../../../accessibility/RovingTabIndex";
 | 
					import { useRovingTabIndex } from "../../../accessibility/RovingTabIndex";
 | 
				
			||||||
import Toolbar from "../../../accessibility/Toolbar";
 | 
					import Toolbar from "../../../accessibility/Toolbar";
 | 
				
			||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
 | 
					import { replaceableComponent } from "../../../utils/replaceableComponent";
 | 
				
			||||||
import { Action } from "../../../dispatcher/actions";
 | 
					import { Action } from "../../../dispatcher/actions";
 | 
				
			||||||
 | 
					import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IProps {
 | 
					interface IProps {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -43,6 +44,31 @@ interface IState {
 | 
				
			||||||
    skipFirst: boolean;
 | 
					    skipFirst: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const RoomBreadcrumbTile = ({ room, onClick }: { room: Room, onClick: () => void }) => {
 | 
				
			||||||
 | 
					    const [onFocus, isActive, ref] = useRovingTabIndex();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					        <AccessibleTooltipButton
 | 
				
			||||||
 | 
					            className="mx_RoomBreadcrumbs_crumb"
 | 
				
			||||||
 | 
					            onClick={onClick}
 | 
				
			||||||
 | 
					            aria-label={_t("Room %(name)s", { name: room.name })}
 | 
				
			||||||
 | 
					            title={room.name}
 | 
				
			||||||
 | 
					            tooltipClassName="mx_RoomBreadcrumbs_Tooltip"
 | 
				
			||||||
 | 
					            onFocus={onFocus}
 | 
				
			||||||
 | 
					            inputRef={ref}
 | 
				
			||||||
 | 
					            tabIndex={isActive ? 0 : -1}
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					            <DecoratedRoomAvatar
 | 
				
			||||||
 | 
					                room={room}
 | 
				
			||||||
 | 
					                avatarSize={32}
 | 
				
			||||||
 | 
					                displayBadge={true}
 | 
				
			||||||
 | 
					                forceCount={true}
 | 
				
			||||||
 | 
					                tooltipProps={{ tabIndex: isActive ? 0 : -1 }}
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					        </AccessibleTooltipButton>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@replaceableComponent("views.rooms.RoomBreadcrumbs")
 | 
					@replaceableComponent("views.rooms.RoomBreadcrumbs")
 | 
				
			||||||
export default class RoomBreadcrumbs extends React.PureComponent<IProps, IState> {
 | 
					export default class RoomBreadcrumbs extends React.PureComponent<IProps, IState> {
 | 
				
			||||||
    private isMounted = true;
 | 
					    private isMounted = true;
 | 
				
			||||||
| 
						 | 
					@ -87,23 +113,7 @@ export default class RoomBreadcrumbs extends React.PureComponent<IProps, IState>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public render(): React.ReactElement {
 | 
					    public render(): React.ReactElement {
 | 
				
			||||||
        const tiles = BreadcrumbsStore.instance.rooms.map((r, i) => {
 | 
					        const tiles = BreadcrumbsStore.instance.rooms.map((r, i) => {
 | 
				
			||||||
            return (
 | 
					            return <RoomBreadcrumbTile key={r.roomId} room={r} onClick={() => this.viewRoom(r, i)} />;
 | 
				
			||||||
                <RovingAccessibleTooltipButton
 | 
					 | 
				
			||||||
                    className="mx_RoomBreadcrumbs_crumb"
 | 
					 | 
				
			||||||
                    key={r.roomId}
 | 
					 | 
				
			||||||
                    onClick={() => this.viewRoom(r, i)}
 | 
					 | 
				
			||||||
                    aria-label={_t("Room %(name)s", { name: r.name })}
 | 
					 | 
				
			||||||
                    title={r.name}
 | 
					 | 
				
			||||||
                    tooltipClassName="mx_RoomBreadcrumbs_Tooltip"
 | 
					 | 
				
			||||||
                >
 | 
					 | 
				
			||||||
                    <DecoratedRoomAvatar
 | 
					 | 
				
			||||||
                        room={r}
 | 
					 | 
				
			||||||
                        avatarSize={32}
 | 
					 | 
				
			||||||
                        displayBadge={true}
 | 
					 | 
				
			||||||
                        forceCount={true}
 | 
					 | 
				
			||||||
                    />
 | 
					 | 
				
			||||||
                </RovingAccessibleTooltipButton>
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (tiles.length > 0) {
 | 
					        if (tiles.length > 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue