@@ -4,9 +4,9 @@ import { createPortal } from 'react-dom'
44import PropTypes from 'prop-types'
55import styled from 'styled-components'
66import classNames from 'classnames'
7+ import Transition from './Transition'
78import * as defaultTheme from './theme/defaultTheme'
89import { th } from './utils'
9- import Transition from './Transition'
1010
1111class ModalComponent extends React . Component {
1212 constructor ( props ) {
@@ -28,7 +28,7 @@ class ModalComponent extends React.Component {
2828 document . removeEventListener ( 'keyup' , this . handleKeyup )
2929 }
3030
31- componentDidUpdate ( ) {
31+ setupKeyHandling ( ) {
3232 if ( this . props . opened ) {
3333 document . body . style . overflow = 'hidden'
3434 document . addEventListener ( 'keyup' , this . handleKeyup )
@@ -38,21 +38,31 @@ class ModalComponent extends React.Component {
3838 }
3939 }
4040
41+ componentDidMount ( ) {
42+ this . setupKeyHandling ( )
43+ }
44+
45+ componentDidUpdate ( ) {
46+ this . setupKeyHandling ( )
47+ }
48+
4149 render ( ) {
4250 const { className, theme, opened, onClose, children, ...props } = this . props
4351 if ( ! this . container ) return null
4452 return createPortal (
45- < Transition ms = { theme . modalTransitionDuration } toggle = { this . props . opened } >
46- { ( { entering, exiting } ) => (
53+ < Transition
54+ timeout = { theme . modalTransitionDuration }
55+ in = { this . props . opened }
56+ >
57+ { transitionState => (
4758 < div
4859 role = "dialog"
4960 tabIndex = "-1"
5061 className = { classNames (
5162 'sui-modal' ,
5263 {
53- 'sui-modal-opened' : opened || exiting || entering ,
54- 'sui-modal-fade-in' : entering ,
55- 'sui-modal-fade-out' : exiting ,
64+ 'sui-modal-opened' : opened || transitionState === 'exiting' ,
65+ [ `sui-modal-transition-${ transitionState } ` ] : transitionState ,
5666 } ,
5767 className ,
5868 ) }
@@ -75,23 +85,30 @@ const Modal = styled(ModalComponent)`
7585 bottom: 0;
7686 left: 0;
7787 z-index: ${ th ( 'zIndexModal' ) } ;
78- display: none ;
88+ visibility: hidden ;
7989 overflow: hidden;
8090 outline: 0;
81- opacity: 0;
82- transition: opacity ${ th ( 'modalTransitionDuration' ) } ms;
91+ transition: opacity ${ th ( 'modalTransitionDuration' ) } ms ease-in-out;
8392
8493 &.sui-modal-opened {
85- display: block ;
94+ visibility: visible ;
8695 overflow-x: hidden;
8796 overflow-y: auto;
8897 }
8998
90- &.sui-modal-fade-in {
99+ &.sui-modal-transition-entering {
100+ opacity: 1;
101+ }
102+
103+ &.sui-modal-transition-entered {
91104 opacity: 1;
92105 }
93106
94- &.sui-modal-fade-out {
107+ &.sui-modal-transition-exited {
108+ opacity: 0;
109+ }
110+
111+ &.sui-modal-transition-exiting {
95112 opacity: 0;
96113 }
97114
0 commit comments