@@ -19,6 +19,7 @@ import React, { PureComponent } from "react";
1919import { Layout , Menu , Icon , Switch } from "antd" ;
2020import pathToRegexp from "path-to-regexp" ;
2121import { Link } from "dva/router" ;
22+ import { Resizable } from "react-resizable" ;
2223import styles from "./index.less" ;
2324import { urlToList } from "../_utils/pathTools" ;
2425import { getCurrentLocale , getIntlContent } from "../../utils/IntlUtils" ;
@@ -86,6 +87,7 @@ export default class SiderMenu extends PureComponent {
8687 localeName : "" ,
8788 mode : "inline" ,
8889 theme : "dark" ,
90+ width : 250 ,
8991 } ;
9092 }
9193
@@ -276,6 +278,12 @@ export default class SiderMenu extends PureComponent {
276278 } ) ;
277279 } ;
278280
281+ onResize = ( event , { size } ) => {
282+ this . setState ( {
283+ width : size . width ,
284+ } ) ;
285+ } ;
286+
279287 /** Modify the menu based on the current language */
280288 updateMenuData ( ) {
281289 if ( this . props . menuData . length === 0 ) {
@@ -330,38 +338,55 @@ export default class SiderMenu extends PureComponent {
330338 }
331339
332340 return (
333- < Sider
334- trigger = { null }
335- collapsible
336- collapsed = { collapsed }
337- breakpoint = "lg"
338- onCollapse = { onCollapse }
339- width = { 220 }
340- className = { styles . sider }
341+ < Resizable
342+ width = { this . state . width }
343+ height = { 0 }
344+ onResize = { this . onResize }
345+ draggableOpts = { { enableUserSelectHack : false } }
346+ handle = {
347+ < span
348+ className = "react-resizable-handle"
349+ onClick = { ( e ) => {
350+ e . stopPropagation ( ) ;
351+ } }
352+ />
353+ }
354+ minConstraints = { [ 200 , 0 ] }
355+ maxConstraints = { [ 500 , 0 ] }
341356 >
342- < Link to = "/" >
343- < div className = { styles . logo } key = "logo" >
344- < img className = { styles . TitleLogo } src = { TitleLogo } alt = "logo" />
345- </ div >
346- </ Link >
347- < Switch
348- onChange = { this . changeMode }
349- checkedChildren = "Change Mode"
350- unCheckedChildren = "Change Mode"
351- className = { styles . changeMode }
352- />
353- < Menu
354- key = "Menu"
355- theme = { this . state . theme }
356- mode = { this . state . mode }
357- { ...menuProps }
358- onOpenChange = { this . handleOpenChange }
359- selectedKeys = { selectedKeys }
360- style = { { padding : "16px 0" , width : "100%" } }
357+ < Sider
358+ trigger = { null }
359+ collapsible
360+ collapsed = { collapsed }
361+ breakpoint = "lg"
362+ onCollapse = { onCollapse }
363+ width = { this . state . width }
364+ className = { styles . sider }
361365 >
362- { this . getNavMenuItems ( menuData ) }
363- </ Menu >
364- </ Sider >
366+ < Link to = "/" >
367+ < div className = { styles . logo } key = "logo" >
368+ < img className = { styles . TitleLogo } src = { TitleLogo } alt = "logo" />
369+ </ div >
370+ </ Link >
371+ < Switch
372+ onChange = { this . changeMode }
373+ checkedChildren = "Change Mode"
374+ unCheckedChildren = "Change Mode"
375+ className = { styles . changeMode }
376+ />
377+ < Menu
378+ key = "Menu"
379+ theme = { this . state . theme }
380+ mode = { this . state . mode }
381+ { ...menuProps }
382+ onOpenChange = { this . handleOpenChange }
383+ selectedKeys = { selectedKeys }
384+ style = { { padding : "16px 0" , width : "100%" } }
385+ >
386+ { this . getNavMenuItems ( menuData ) }
387+ </ Menu >
388+ </ Sider >
389+ </ Resizable >
365390 ) ;
366391 }
367392}
0 commit comments