fix: add focus trap to the selectionoverlay too

pull/3061/head
Audric Ackermann 1 year ago
parent ce1dfd2875
commit dca7469974

@ -63,19 +63,16 @@ export const SessionWrapperModal = (props: SessionWrapperModalType) => {
} }
}; };
const fallbackFocusId = 'session-wrapper-modal';
return ( return (
<FocusTrap focusTrapOptions={{ initialFocus: '#focus-trap-start-wrapper' }}> <FocusTrap focusTrapOptions={{ fallbackFocus: `#${fallbackFocusId}`, allowOutsideClick: true }}>
<div <div
className={classNames('loki-dialog modal', additionalClassName || null)} className={classNames('loki-dialog modal', additionalClassName || null)}
onClick={handleClick} onClick={handleClick}
role="dialog" role="dialog"
id={fallbackFocusId}
> >
{/* FocusTrap needs a button always mounted as a start, which is apparently not our case */}
<div
role="button"
id="focus-trap-start-wrapper"
style={{ opacity: 0, width: 0, height: 0 }}
/>
<div className="session-confirm-wrapper"> <div className="session-confirm-wrapper">
<div ref={modalRef} className="session-modal"> <div ref={modalRef} className="session-modal">
{showHeader ? ( {showHeader ? (

@ -1,6 +1,8 @@
import FocusTrap from 'focus-trap-react';
import React from 'react'; import React from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
import { import {
deleteMessagesById, deleteMessagesById,
deleteMessagesByIdForEveryone, deleteMessagesByIdForEveryone,
@ -73,32 +75,36 @@ export const SelectionOverlay = () => {
const isOnlyServerDeletable = isPublic; const isOnlyServerDeletable = isPublic;
const classNameAndId = 'message-selection-overlay';
return ( return (
<div className="message-selection-overlay"> <FocusTrap focusTrapOptions={{ fallbackFocus: `#${classNameAndId}`, allowOutsideClick: true }}>
<div className="close-button"> <div className={classNameAndId} id={classNameAndId}>
<SessionIconButton iconType="exit" iconSize="medium" onClick={onCloseOverlay} /> <div className="close-button">
</div> <SessionIconButton iconType="exit" iconSize="medium" onClick={onCloseOverlay} />
</div>
<div className="button-group"> <div className="button-group">
<SessionButton <SessionButton
buttonColor={SessionButtonColor.Danger} buttonColor={SessionButtonColor.Danger}
buttonShape={SessionButtonShape.Square} buttonShape={SessionButtonShape.Square}
buttonType={SessionButtonType.Solid} buttonType={SessionButtonType.Solid}
text={window.i18n('delete')} text={window.i18n('delete')}
onClick={() => { onClick={() => {
if (selectedConversationKey) { if (selectedConversationKey) {
if (isOnlyServerDeletable) { if (isOnlyServerDeletable) {
void onDeleteSelectedMessagesForEveryone( void onDeleteSelectedMessagesForEveryone(
selectedConversationKey, selectedConversationKey,
selectedMessageIds selectedMessageIds
); );
} else { } else {
void deleteMessagesById(selectedMessageIds, selectedConversationKey); void deleteMessagesById(selectedMessageIds, selectedConversationKey);
}
} }
} }}
}} />
/> </div>
</div> </div>
</div> </FocusTrap>
); );
}; };

Loading…
Cancel
Save