@@ -14,6 +14,7 @@ type RepositoryItemProps = {
14
14
15
15
export const RepositoryItem = ( { repository } : RepositoryItemProps ) => {
16
16
const [ isIssueOpen , setIsIssueOpen ] = useState ( false ) ;
17
+ const [ isIssuesListVisible , setIsIssuesListVisible ] = useState ( false ) ;
17
18
18
19
dayjs . extend ( relativeTime ) ;
19
20
const useLastModified = ( date : string ) => {
@@ -25,10 +26,20 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => {
25
26
} ;
26
27
const lastModified = useLastModified ( repository . last_modified ) ;
27
28
29
+ useEffect ( ( ) => {
30
+ if ( isIssueOpen ) {
31
+ setIsIssuesListVisible ( true ) ;
32
+ } else {
33
+ // Delay unmounting to allow close animation to complete
34
+ const timer = setTimeout ( ( ) => setIsIssuesListVisible ( false ) , 300 ) ;
35
+ return ( ) => clearTimeout ( timer ) ;
36
+ }
37
+ } , [ isIssueOpen ] ) ;
38
+
28
39
return (
29
40
< div className = "repo-item" >
30
- < div id = { `repo-${ repository . id } ` } onClick = { ( ) => setIsIssueOpen ( ! isIssueOpen ) } >
31
- < div >
41
+ < div id = { `repo-${ repository . id } ` } >
42
+ < div onClick = { ( ) => setIsIssueOpen ( ! isIssueOpen ) } >
32
43
< RepositoryItemTopBar
33
44
isIssueOpen = { isIssueOpen }
34
45
repositoryHasNewIssues = { repository . has_new_issues }
@@ -50,7 +61,9 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => {
50
61
/>
51
62
</ div >
52
63
</ div >
53
- { isIssueOpen && < IssuesList issues = { repository . issues } /> }
64
+ < div className = { `repo-item__issues-warper ${ isIssueOpen ? 'open' : '' } ` } >
65
+ { isIssuesListVisible && < IssuesList issues = { repository . issues } /> }
66
+ </ div >
54
67
</ div >
55
68
</ div >
56
69
) ;
0 commit comments