11import React from 'react' ;
22import PropTypes from 'prop-types' ;
33import yubikiri from 'yubikiri' ;
4+ import { Disposable } from 'event-kit' ;
45
56import { GithubLoginModelPropType , RefHolderPropType } from '../prop-types' ;
67import OperationStateObserver , { PUSH , PULL , FETCH } from '../models/operation-state-observer' ;
8+ import Refresher from '../models/refresher' ;
79import GitHubTabController from '../controllers/github-tab-controller' ;
810import ObserveModel from '../views/observe-model' ;
911import RemoteSet from '../models/remote-set' ;
@@ -15,21 +17,51 @@ export default class GitHubTabContainer extends React.Component {
1517 repository : PropTypes . object ,
1618 loginModel : GithubLoginModelPropType . isRequired ,
1719 rootHolder : RefHolderPropType . isRequired ,
20+
21+ changeWorkingDirectory : PropTypes . func . isRequired ,
22+ onDidChangeWorkDirs : PropTypes . func . isRequired ,
23+ getCurrentWorkDirs : PropTypes . func . isRequired ,
24+ openCreateDialog : PropTypes . func . isRequired ,
25+ openPublishDialog : PropTypes . func . isRequired ,
26+ openCloneDialog : PropTypes . func . isRequired ,
27+ openGitTab : PropTypes . func . isRequired ,
1828 }
1929
20- state = { } ;
30+ constructor ( props ) {
31+ super ( props ) ;
32+
33+ this . state = {
34+ lastRepository : null ,
35+ remoteOperationObserver : new Disposable ( ) ,
36+ refresher : new Refresher ( ) ,
37+ observerSub : new Disposable ( ) ,
38+ } ;
39+ }
2140
2241 static getDerivedStateFromProps ( props , state ) {
2342 if ( props . repository !== state . lastRepository ) {
43+ state . remoteOperationObserver . dispose ( ) ;
44+ state . observerSub . dispose ( ) ;
45+
46+ const remoteOperationObserver = new OperationStateObserver ( props . repository , PUSH , PULL , FETCH ) ;
47+ const observerSub = remoteOperationObserver . onDidComplete ( ( ) => state . refresher . trigger ( ) ) ;
48+
2449 return {
2550 lastRepository : props . repository ,
26- remoteOperationObserver : new OperationStateObserver ( props . repository , PUSH , PULL , FETCH ) ,
51+ remoteOperationObserver,
52+ observerSub,
2753 } ;
2854 }
2955
3056 return null ;
3157 }
3258
59+ componentWillUnmount ( ) {
60+ this . state . observerSub . dispose ( ) ;
61+ this . state . remoteOperationObserver . dispose ( ) ;
62+ this . state . refresher . dispose ( ) ;
63+ }
64+
3365 fetchRepositoryData = repository => {
3466 return yubikiri ( {
3567 workingDirectory : repository . getWorkingDirectoryPath ( ) ,
@@ -58,7 +90,7 @@ export default class GitHubTabContainer extends React.Component {
5890 return (
5991 < GitHubTabController
6092 { ...this . props }
61- remoteOperationObserver = { this . state . remoteOperationObserver }
93+ refresher = { this . state . refresher }
6294
6395 allRemotes = { new RemoteSet ( ) }
6496 branches = { new BranchSet ( ) }
@@ -73,7 +105,7 @@ export default class GitHubTabContainer extends React.Component {
73105 return (
74106 < GitHubTabController
75107 { ...this . props }
76- remoteOperationObserver = { this . state . remoteOperationObserver }
108+ refresher = { this . state . refresher }
77109
78110 allRemotes = { new RemoteSet ( ) }
79111 branches = { new BranchSet ( ) }
@@ -88,7 +120,7 @@ export default class GitHubTabContainer extends React.Component {
88120 < GitHubTabController
89121 { ...data }
90122 { ...this . props }
91- remoteOperationObserver = { this . state . remoteOperationObserver }
123+ refresher = { this . state . refresher }
92124 isLoading = { false }
93125 />
94126 ) ;
0 commit comments