Skip to content

Commit 1ff7af7

Browse files
committed
feat(Modal): migrate to restart/ui
1 parent edac2d7 commit 1ff7af7

File tree

4 files changed

+24
-20
lines changed

4 files changed

+24
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@babel/runtime": "^7.14.0",
6161
"@restart/context": "^2.1.4",
6262
"@restart/hooks": "^0.3.26",
63+
"@restart/ui": "^0.2.0",
6364
"@types/invariant": "^2.2.33",
6465
"@types/prop-types": "^15.7.3",
6566
"@types/react": ">=16.14.8",
@@ -70,7 +71,6 @@
7071
"invariant": "^2.2.4",
7172
"prop-types": "^15.7.2",
7273
"prop-types-extra": "^1.1.0",
73-
"react-overlays": "^5.1.1",
7474
"react-transition-group": "^4.4.1",
7575
"uncontrollable": "^7.2.1",
7676
"warning": "^4.0.3"

src/BootstrapModalManager.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import addClass from 'dom-helpers/addClass';
12
import css from 'dom-helpers/css';
23
import qsa from 'dom-helpers/querySelectorAll';
3-
import getScrollbarSize from 'dom-helpers/scrollbarSize';
4-
import ModalManager from 'react-overlays/ModalManager';
4+
import removeClass from 'dom-helpers/removeClass';
5+
import ModalManager, { ContainerState } from '@restart/ui/ModalManager';
56

67
const Selector = {
78
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -35,25 +36,30 @@ class BootstrapModalManager extends ModalManager {
3536
}
3637
}
3738

38-
setContainerStyle(containerState, container) {
39-
super.setContainerStyle(containerState, container);
39+
setContainerStyle(containerState: ContainerState) {
40+
super.setContainerStyle(containerState);
4041

41-
if (!containerState.overflowing) return;
42-
const size = getScrollbarSize();
42+
const container = this.getElement();
43+
addClass(container, 'modal-open');
44+
45+
if (!containerState.scrollBarWidth) return;
4346

4447
qsa(container, Selector.FIXED_CONTENT).forEach((el) =>
45-
this.adjustAndStore('paddingRight', el, size),
48+
this.adjustAndStore('paddingRight', el, containerState.scrollBarWidth),
4649
);
4750
qsa(container, Selector.STICKY_CONTENT).forEach((el) =>
48-
this.adjustAndStore('marginRight', el, -size),
51+
this.adjustAndStore('marginRight', el, -containerState.scrollBarWidth),
4952
);
5053
qsa(container, Selector.NAVBAR_TOGGLER).forEach((el) =>
51-
this.adjustAndStore('marginRight', el, size),
54+
this.adjustAndStore('marginRight', el, containerState.scrollBarWidth),
5255
);
5356
}
5457

55-
removeContainerStyle(containerState, container) {
56-
super.removeContainerStyle(containerState, container);
58+
removeContainerStyle(containerState: ContainerState) {
59+
super.removeContainerStyle(containerState);
60+
61+
const container = this.getElement();
62+
removeClass(container, 'modal-open');
5763

5864
qsa(container, Selector.FIXED_CONTENT).forEach((el) =>
5965
this.restore('paddingRight', el),

src/Modal.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import transitionEnd from 'dom-helpers/transitionEnd';
1212
import PropTypes from 'prop-types';
1313
import * as React from 'react';
1414
import { useCallback, useMemo, useRef, useState } from 'react';
15-
import BaseModal, { BaseModalProps } from 'react-overlays/Modal';
16-
import { ModalInstance } from 'react-overlays/ModalManager';
15+
import BaseModal, { ModalProps as BaseModalProps } from '@restart/ui/Modal';
16+
import { ModalInstance } from '@restart/ui/ModalManager';
1717
import { getSharedManager } from './BootstrapModalManager';
1818
import Fade from './Fade';
1919
import ModalBody from './ModalBody';
@@ -305,9 +305,8 @@ const Modal: BsPrefixRefForwardingComponent<'div', ModalProps> =
305305
function updateDialogStyle(node) {
306306
if (!canUseDOM) return;
307307

308-
const containerIsOverflowing = getModalManager().isContainerOverflowing(
309-
modal!,
310-
);
308+
const containerIsOverflowing =
309+
getModalManager().getScrollbarWidth() > 0;
311310

312311
const modalIsOverflowing =
313312
node.scrollHeight > ownerDocument(node).documentElement.clientHeight;
@@ -387,7 +386,7 @@ const Modal: BsPrefixRefForwardingComponent<'div', ModalProps> =
387386

388387
const handleEscapeKeyDown = (e) => {
389388
if (!keyboard && backdrop === 'static') {
390-
// Call preventDefault to stop modal from closing in react-overlays,
389+
// Call preventDefault to stop modal from closing in restart ui,
391390
// then play our animation.
392391
e.preventDefault();
393392
handleStaticModalAnimation();
@@ -495,7 +494,6 @@ const Modal: BsPrefixRefForwardingComponent<'div', ModalProps> =
495494
onExiting={onExiting}
496495
onExited={handleExited}
497496
manager={getModalManager()}
498-
containerClassName={`${bsPrefix}-open`}
499497
transition={animation ? DialogTransition : undefined}
500498
backdropTransition={animation ? BackdropTransition : undefined}
501499
renderBackdrop={renderBackdrop}

test/ModalSpec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { mount } from 'enzyme';
22
import * as React from 'react';
3-
import ModalManager from 'react-overlays/ModalManager';
3+
import ModalManager from '@restart/ui/ModalManager';
44
import Modal from '../src/Modal';
55

66
describe('<Modal>', () => {

0 commit comments

Comments
 (0)