@@ -11,6 +11,8 @@ import DatasetComponent from './DatasetComponent'
1111import DatasetListContainer from '../containers/DatasetListContainer'
1212import CommitDetailsContainer from '../containers/CommitDetailsContainer'
1313
14+ import { CSSTransition } from 'react-transition-group'
15+
1416import { defaultSidebarWidth } from '../reducers/ui'
1517
1618import {
@@ -21,8 +23,6 @@ import {
2123 Mutations
2224} from '../models/store'
2325
24- import { CSSTransition } from 'react-transition-group'
25-
2626export interface DatasetProps {
2727 // redux state
2828 ui : UI
@@ -46,6 +46,8 @@ interface DatasetState {
4646 peername : string
4747 name : string
4848 saveIsLoading : boolean
49+ workingDatasetIsLoading : boolean
50+ activeTab : string
4951}
5052
5153const logo = require ( '../assets/qri-blob-logo-tiny.png' ) //eslint-disable-line
@@ -56,7 +58,9 @@ export default class Dataset extends React.Component<DatasetProps> {
5658 state = {
5759 peername : null ,
5860 name : null ,
59- saveIsLoading : false
61+ saveIsLoading : false ,
62+ workingDatasetIsLoading : true ,
63+ activeTab : this . props . selections . activeTab
6064 }
6165
6266 componentDidMount ( ) {
@@ -74,7 +78,7 @@ export default class Dataset extends React.Component<DatasetProps> {
7478 // working dataset is selected and trigger api call(s)
7579 static getDerivedStateFromProps ( nextProps : DatasetProps , prevState : DatasetState ) {
7680 const { peername : newPeername , name : newName } = nextProps . selections
77- const { peername, name } = prevState
81+ const { peername, name, workingDatasetIsLoading , activeTab } = prevState
7882 // when new props arrive, compare selections.peername and selections.name to
7983 // previous. If either is different, fetch data
8084 if ( ( newPeername !== peername ) || ( newName !== name ) ) {
@@ -87,6 +91,23 @@ export default class Dataset extends React.Component<DatasetProps> {
8791 }
8892 }
8993
94+ // make sure that the component we are trying to show actually exists in this version of the dataset
95+ if ( ( workingDatasetIsLoading && ! nextProps . workingDataset . isLoading && nextProps . selections . activeTab === 'status' ) ||
96+ ( activeTab === 'history' && nextProps . selections . activeTab === 'status' ) ) {
97+ const { workingDataset, selections, setSelectedListItem } = nextProps
98+ const { component } = selections
99+ const { status } = workingDataset
100+ if ( component === '' || ! status [ component ] ) {
101+ if ( status [ 'meta' ] ) {
102+ setSelectedListItem ( 'component' , 'meta' )
103+ }
104+ if ( status [ 'body' ] ) {
105+ setSelectedListItem ( 'component' , 'body' )
106+ }
107+ setSelectedListItem ( 'component' , 'schema' )
108+ }
109+ }
110+
90111 // check state to see if there was a successful save
91112 // successful save means mutations.save.isLoading was true and is now false,
92113 // and mutations.save.error is falsy
@@ -101,7 +122,9 @@ export default class Dataset extends React.Component<DatasetProps> {
101122 }
102123
103124 return {
104- saveIsLoading : newSaveIsLoading
125+ saveIsLoading : newSaveIsLoading ,
126+ activeTab : nextProps . selections . activeTab ,
127+ workingDatasetIsLoading : nextProps . workingDataset . isLoading
105128 }
106129 }
107130
@@ -110,6 +133,7 @@ export default class Dataset extends React.Component<DatasetProps> {
110133 const { ui, selections, workingDataset } = this . props
111134 const { showDatasetList, datasetSidebarWidth } = ui
112135 const {
136+ name,
113137 activeTab,
114138 component : selectedComponent ,
115139 commit : selectedCommit
@@ -197,7 +221,7 @@ export default class Dataset extends React.Component<DatasetProps> {
197221 />
198222 </ Resizable >
199223 < div className = 'content-wrapper' >
200- { showDatasetList && < div className = 'overlay' > </ div > }
224+ { showDatasetList && < div className = 'overlay' onClick = { toggleDatasetList } > </ div > }
201225 < div className = 'transition-group' >
202226 < CSSTransition
203227 in = { activeTab === 'status' }
@@ -219,7 +243,6 @@ export default class Dataset extends React.Component<DatasetProps> {
219243 </ CSSTransition >
220244 </ div >
221245 </ div >
222-
223246 </ div >
224247 {
225248 showDatasetList && (
0 commit comments