Skip to content

Commit dc99a0d

Browse files
committed
Merge pull request #3206 from r0hit-gupta/msft187
MSFT-187
1 parent 68104db commit dc99a0d

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"filestack-js": "^1.7.7",
5252
"filestack-react": "^2.0.0",
5353
"flag-icon-css": "^3.3.0",
54+
"focus-trap-react": "^6.0.0",
5455
"helmet": "^3.12.1",
5556
"highlight.js": "^9.13.1",
5657
"html-to-text": "^3.3.0",

src/shared/components/Terms/index.jsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable jsx-a11y/no-noninteractive-tabindex */
12
/**
23
* Terms component which displays modal window with term details
34
*/
@@ -9,6 +10,7 @@ import React from 'react';
910
import PT from 'prop-types';
1011
import { Modal, PrimaryButton, Button } from 'topcoder-react-ui-kit';
1112
import LoadingIndicator from 'components/LoadingIndicator';
13+
import FocusTrap from 'focus-trap-react';
1214
import TermDetails from './TermDetails';
1315

1416
import style from './styles.scss';
@@ -54,6 +56,7 @@ export default class Terms extends React.Component {
5456
this.resizeHandler = this.resizeHandler.bind(this);
5557
this.nextTerm = this.nextTerm.bind(this);
5658
this.max = 0;
59+
this.terms = React.createRef();
5760
}
5861

5962
componentDidMount() {
@@ -63,6 +66,7 @@ export default class Terms extends React.Component {
6366
}
6467
window.addEventListener('message', this.messageHandler, false);
6568
window.addEventListener('resize', this.resizeHandler, false);
69+
this.terms.current.focus();
6670
}
6771

6872
componentWillReceiveProps(nextProps) {
@@ -83,6 +87,10 @@ export default class Terms extends React.Component {
8387
}
8488
}
8589

90+
componentDidUpdate() {
91+
this.terms.current.focus();
92+
}
93+
8694
componentWillUnmount() {
8795
window.removeEventListener('message', this.messageHandler);
8896
window.removeEventListener('resize', this.resizeHandler);
@@ -152,17 +160,18 @@ export default class Terms extends React.Component {
152160

153161
return (
154162
<div key={(selectedTerm || {}).termsOfUseId}>
155-
<Modal
156-
onCancel={onCancel}
157-
theme={{ container: style['modal-container'] }}
158-
>
159-
{
163+
<FocusTrap>
164+
<Modal
165+
onCancel={onCancel}
166+
theme={{ container: style['modal-container'] }}
167+
>
168+
{
160169
isLoadingTerms
161170
&& <LoadingIndicator />
162171
}
163-
{
172+
{
164173
!isLoadingTerms && (
165-
<div styleName="modal-content">
174+
<div styleName="modal-content" ref={this.terms} tabIndex="0">
166175
<div styleName="title">
167176
{terms.length > 1 ? defaultTitle : terms[0].title}
168177
</div>
@@ -216,6 +225,8 @@ export default class Terms extends React.Component {
216225
</div>
217226
<div
218227
styleName="tab-title"
228+
tabIndex="0"
229+
role="tab"
219230
onClick={() => this.selectTerm(t)}
220231
onKeyPress={() => this.selectTerm(t)}
221232
>
@@ -318,7 +329,8 @@ export default class Terms extends React.Component {
318329
</div>
319330
)
320331
}
321-
</Modal>
332+
</Modal>
333+
</FocusTrap>
322334
</div>
323335
);
324336
}

src/shared/components/Terms/styles.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
flex: 1;
3232
flex-direction: column;
3333
max-height: 100%;
34+
35+
&:focus {
36+
outline: none;
37+
}
3438
}
3539

3640
.scrollable-area {

0 commit comments

Comments
 (0)