@@ -28,7 +28,7 @@ import { ReviewType } from '../../src/github/views';
2828import PullRequestContext from '../common/context' ;
2929import { CommentView } from './comment' ;
3030import Diff from './diff' ;
31- import { commitIcon , errorIcon , mergeIcon , plusIcon , tasklistIcon , threeBars } from './icon' ;
31+ import { commitIcon , errorIcon , loadingIcon , mergeIcon , plusIcon , tasklistIcon , threeBars } from './icon' ;
3232import { nbsp } from './space' ;
3333import { Timestamp } from './timestamp' ;
3434import { AuthorLink , Avatar } from './user' ;
@@ -107,12 +107,18 @@ export default Timeline;
107107
108108const CommitEventView = ( event : CommitEvent ) => {
109109 const context = useContext ( PullRequestContext ) ;
110+ const [ clickedElement , setClickedElement ] = useState < 'title' | 'sha' | undefined > ( undefined ) ;
110111
111- const handleCommitClick = ( e : React . MouseEvent ) => {
112+ const handleCommitClick = ( e : React . MouseEvent , elementType : 'title' | 'sha' ) => {
112113 e . preventDefault ( ) ;
113- context . openCommitChanges ( event . sha ) ;
114+ setClickedElement ( elementType ) ;
115+ context . openCommitChanges ( event . sha ) . finally ( ( ) => {
116+ setClickedElement ( undefined ) ;
117+ } ) ;
114118 } ;
115119
120+ const isLoading = context . pr ?. loadingCommit === event . sha ;
121+
116122 return (
117123 < div className = "comment-container commit" >
118124 < div className = "commit-message" >
@@ -124,19 +130,21 @@ const CommitEventView = (event: CommitEvent) => {
124130 < div className = "message-container" >
125131 < a
126132 className = "message"
127- onClick = { handleCommitClick }
133+ onClick = { ( e ) => handleCommitClick ( e , 'title' ) }
128134 title = { event . htmlUrl }
129135 >
130136 { event . message . substr ( 0 , event . message . indexOf ( '\n' ) > - 1 ? event . message . indexOf ( '\n' ) : event . message . length ) }
131137 </ a >
138+ { isLoading && clickedElement === 'title' && < span className = "commit-spinner-inline" > { loadingIcon } </ span > }
132139 </ div >
133140 </ div >
134141 < div className = "timeline-detail" >
135142 < a
136143 className = "sha"
137- onClick = { handleCommitClick }
144+ onClick = { ( e ) => handleCommitClick ( e , 'sha' ) }
138145 title = { event . htmlUrl }
139146 >
147+ { isLoading && clickedElement === 'sha' && < span className = "commit-spinner-before" > { loadingIcon } </ span > }
140148 { event . sha . slice ( 0 , 7 ) }
141149 </ a >
142150 < Timestamp date = { event . committedDate } />
0 commit comments