Skip to content

Commit

Permalink
Accessibility: keyboard navigation on the toolbar (Context menu) (#15060
Browse files Browse the repository at this point in the history
)

Accessibility: keyboard navigation on the toolbar (Context menu)
  • Loading branch information
ahmadkadri authored Sep 17, 2024
1 parent 574c61d commit 8d82c20
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
18 changes: 18 additions & 0 deletions react/features/base/config/functions.any.ts
Original file line number Diff line number Diff line change
Expand Up @@ -381,3 +381,21 @@ export function getLegalUrls(state: IReduxState) {
terms: configLegalUrls?.terms || DEFAULT_TERMS_URL
};
}

/**
* Utility function to debounce the execution of a callback function.
*
* @param {Function} callback - The callback to debounce.
* @param {number} delay - The debounce delay in milliseconds.
* @returns {Function} - A debounced function that delays the execution of the callback.
*/
export function debounce(callback: (...args: any[]) => void, delay: number) {
let timerId: any;

return (...args: any[]) => {
if (timerId) {
clearTimeout(timerId);
}
timerId = setTimeout(() => callback(...args), delay);
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ const AudioSettingsContent = ({

return (
<ContextMenu
activateFocusTrap = { true }
aria-labelledby = 'audio-settings-button'
className = { classes.contextMenu }
hidden = { false }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,7 @@ const VideoSettingsContent = ({

return (
<ContextMenu
activateFocusTrap = { true }
aria-labelledby = 'video-settings-button'
className = { classes.container }
hidden = { false }
Expand Down
11 changes: 7 additions & 4 deletions react/features/toolbox/components/web/DialogPortal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import ReactDOM from 'react-dom';
import { useSelector } from 'react-redux';

import { IReduxState } from '../../../app/types';
import { debounce } from '../../../base/config/functions.any';
import { ZINDEX_DIALOG_PORTAL } from '../../constants';

interface IProps {

/**
* The component(s) to be displayed within the drawer portal.
*/
* The component(s) to be displayed within the drawer portal.
*/
children: ReactNode;

/**
Expand Down Expand Up @@ -86,7 +87,7 @@ function DialogPortal({ children, className, style, getRef, setSize, targetSelec
width: 1,
height: 1
};
const observer = new ResizeObserver(entries => {
const debouncedResizeCallback = debounce((entries: ResizeObserverEntry[]) => {
const { contentRect } = entries[0];

if (contentRect.width !== size.width || contentRect.height !== size.height) {
Expand All @@ -97,8 +98,10 @@ function DialogPortal({ children, className, style, getRef, setSize, targetSelec
onVisible?.();
}, 100);
}
});
}, 20); // 20ms delay

// Create and observe ResizeObserver
const observer = new ResizeObserver(debouncedResizeCallback);
const target = targetSelector ? portalTarget.querySelector(targetSelector) : portalTarget;

if (document.body) {
Expand Down

0 comments on commit 8d82c20

Please sign in to comment.