@@ -28,8 +28,6 @@ export interface DrawerState {
2828 drawerValue : Animated . ValueXY ;
2929 overlayValue : Animated . Value ;
3030 zIndexValue : number ;
31- handleDrawer : ( isOpen : boolean ) => void ;
32- control : 'props' | 'state' ;
3331 isOpen : boolean ;
3432}
3533
@@ -45,35 +43,26 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
4543 openDrawer : ( ) => null ,
4644 closeDrawer : ( ) => null ,
4745 } ;
48- private handleDrawer : ( isOpen : boolean ) => void ;
4946 constructor ( props : DrawerProps ) {
5047 super ( props ) ;
51- this . handleDrawer = ( isOpen : boolean ) => {
52- isOpen ? this . openDrawer ( ) : this . closeDrawer ( ) ;
53- } ;
48+
5449 this . state = {
5550 zIndexValue : 0 ,
5651 overlayValue : new Animated . Value ( 0 ) ,
5752 drawerValue : new Animated . ValueXY ( { ...this . getInitPosition ( ) } ) ,
58- handleDrawer : this . handleDrawer ,
59- control : 'state' ,
6053 isOpen : ! ! props . isOpen ,
6154 } ;
6255 }
63- static getDerivedStateFromProps ( props : DrawerProps , state : DrawerState ) {
64- if ( state . control === 'state' ) {
65- return {
66- control : 'props' ,
67- } ;
56+ handleDrawer = ( isOpen : boolean ) => {
57+ isOpen ? this . openDrawer ( ) : this . closeDrawer ( ) ;
58+ } ;
59+ componentDidUpdate ( prevProps : DrawerProps , prevState : DrawerState ) {
60+ if ( prevState . isOpen !== this . state . isOpen ) {
61+ this . handleDrawer ( this . state . isOpen ) ;
6862 }
69- if ( props . isOpen !== state . isOpen ) {
70- state . handleDrawer ( ! ! props . isOpen ) ;
71- return {
72- isOpen : props . isOpen ,
73- control : 'props' ,
74- } ;
63+ if ( prevProps . isOpen !== this . props . isOpen ) {
64+ this . handleDrawer ( ! ! this . props . isOpen ) ;
7565 }
76- return null ;
7766 }
7867 componentDidMount ( ) {
7968 if ( this . props . isOpen ) {
@@ -90,8 +79,8 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
9079 this . closeDrawer ( ) ;
9180 } ;
9281 render ( ) {
93- const { isOpen , style, drawerWidth, drawerBackgroundColor, maskProps, placement, drawerHeight } = this . props ;
94- const { drawerValue, overlayValue, zIndexValue } = this . state ;
82+ const { style, drawerWidth, drawerBackgroundColor, maskProps, placement, drawerHeight } = this . props ;
83+ const { isOpen , drawerValue, overlayValue, zIndexValue } = this . state ;
9584 const isTopOrBottom = placement === 'top' || placement === 'bottom' ;
9685 const changeStyle = isTopOrBottom ? 'height' : 'width' ;
9786 const dynamicDrawerStyles : any = {
@@ -180,7 +169,7 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
180169 return xy ;
181170 }
182171 openDrawer ( ) {
183- this . setState ( { zIndexValue : 3002 , control : 'state' } ) ;
172+ this . setState ( { zIndexValue : 3002 , isOpen : true } ) ;
184173 Animated . parallel ( [
185174 Animated . spring ( this . state . drawerValue , {
186175 toValue : { x : 0 , y : 0 } ,
@@ -213,7 +202,7 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
213202 ] ) . start ( ( ) => {
214203 this . props . closeDrawer ! ( false ) ;
215204 this . props . onChange ! ( false ) ;
216- this . setState ( { zIndexValue : 0 , control : 'state' } ) ;
205+ this . setState ( { zIndexValue : 0 , isOpen : false } ) ;
217206 } ) ;
218207 }
219208}
0 commit comments