1- import React , { useState } from 'react' ;
1+ import React , { useCallback , useState } from 'react' ;
22import { Button , Layout , Space } from 'antd' ;
33import { observer } from 'mobx-react' ;
44import { Key } from 'rc-tree/lib/interface' ;
@@ -17,6 +17,8 @@ import TaskNode from './components/TaskNode/TaskNode';
1717import DrawerTask from './components/DrawerTask/DrawerTask' ;
1818import ProjectNode from './components/ProjectNode/ProjectNode' ;
1919import EditProjectModal from './components/ProjectModals/EditProjectModal' ;
20+ import { first } from '../../helpers/ArrayHelper' ;
21+ import clsx from 'clsx' ;
2022
2123const { Sider } = Layout ;
2224
@@ -75,6 +77,16 @@ const ProjectList = TreeList<ProjectModel>(
7577 }
7678) ;
7779
80+ function handleSelectProject ( items : Key [ ] ) {
81+ if ( items . length > 0 ) {
82+ projectStore . setActiveProject ( first ( items ) as string ) ;
83+ }
84+ }
85+
86+ function clearEditableProject ( ) {
87+ projectStore . setEditableProject ( undefined ) ;
88+ }
89+
7890export default observer ( function Projects ( ) {
7991 const classes = useStyles ( ) ;
8092 const [ showProjectModal , setShowProjectModal ] = useState < boolean > ( false ) ;
@@ -85,24 +97,26 @@ export default observer(function Projects() {
8597 setShowProjectModal ( true ) ;
8698 }
8799
88- function handleSelectProject ( items : Key [ ] ) {
89- if ( items . length > 0 ) {
90- projectStore . setActiveProject ( items [ 0 ] as string ) ;
91- }
92- }
93-
94- function handleSelectTask ( items : Key [ ] ) {
100+ const handleSelectTask = useCallback ( ( items : Key [ ] ) => {
95101 if ( items . length > 0 ) {
96102 setDrawerVisible ( true ) ;
97- const task = tasksStore . getTaskByKey ( items [ 0 ] as string ) ;
103+ const task = tasksStore . getTaskByKey ( first ( items ) as string ) ;
98104 setSelectedTask ( task ) ;
99105 }
100- }
106+ } , [ ] ) ;
107+ '' ;
108+ const handleCloseDrawer = useCallback ( ( ) => {
109+ setDrawerVisible ( false ) ;
110+ } , [ ] ) ;
111+
112+ const handleHideProjectModal = useCallback ( ( ) => {
113+ setShowProjectModal ( false ) ;
114+ } , [ ] ) ;
101115
102116 return (
103117 < Layout >
104118 < Sider width = { 250 } className = { classes . sider } >
105- < Layout style = { { padding : '12px' } } >
119+ < Layout className = { classes . padding } >
106120 < Space direction = "vertical" >
107121 < ProjectList onSelect = { handleSelectProject } />
108122 < Button onClick = { handleCreateProject } icon = { < PlusOutlined /> } >
@@ -111,23 +125,21 @@ export default observer(function Projects() {
111125 </ Space >
112126 </ Layout >
113127 </ Sider >
114- < Layout style = { { padding : '24px' } } className = { classes . tasks } >
128+ < Layout className = { clsx ( classes . padding , classes . tasks ) } >
115129 < Space className = "root" direction = "vertical" >
116130 < TaskList onSelect = { handleSelectTask } />
117131 < TaskInput />
118132 </ Space >
119133 </ Layout >
120- { showProjectModal && (
121- < ProjectModal onClose = { ( ) => setShowProjectModal ( false ) } />
122- ) }
134+ { showProjectModal && < ProjectModal onClose = { handleHideProjectModal } /> }
123135 < EditProjectModal
124136 project = { projectStore . editProject }
125- onClose = { ( ) => projectStore . setEditableProject ( undefined ) }
137+ onClose = { clearEditableProject }
126138 />
127139 < DrawerTask
128140 task = { selectedTask }
129141 visible = { drawerVisible }
130- onClose = { ( ) => setDrawerVisible ( false ) }
142+ onClose = { handleCloseDrawer }
131143 />
132144 </ Layout >
133145 ) ;
@@ -141,4 +153,7 @@ const useStyles = createUseStyles({
141153 tasks : {
142154 overflowY : 'auto' ,
143155 } ,
156+ padding : {
157+ padding : 12 ,
158+ } ,
144159} ) ;
0 commit comments