Skip to content
This repository was archived by the owner on Nov 14, 2020. It is now read-only.

Commit 501b805

Browse files
authored
Merge pull request #3 from MarquezProject/bugfix/namespace-selector
Improve namespace selector functionality
2 parents 2d2704b + a40d183 commit 501b805

File tree

3 files changed

+70
-24
lines changed

3 files changed

+70
-24
lines changed

src/App.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,46 @@ import './App.css';
33
import SimpleTabs from './components/Tabs'
44
import NavBar from './components/NavBar'
55
import NamespaceSelector from './components/NamespaceSelector'
6-
6+
import axios from 'axios'
77

88
class App extends Component {
9+
constructor(props) {
10+
super(props);
11+
this.state = {
12+
selectedNamespace: null,
13+
namespaces: []
14+
}
15+
this.nsChangeHandler = this.nsChangeHandler.bind(this);
16+
}
17+
18+
nsChangeHandler(selectedNs) {
19+
this.setState({selectedNamespace: selectedNs})
20+
}
21+
22+
componentDidMount() {
23+
axios.get('/api/v1/namespaces/').then((response) => {
24+
const namespaceList = response.data.namespaces.map(namespace => namespace.name)
25+
console.log(namespaceList)
26+
this.setState({namespaces: namespaceList})
27+
this.setState({selectedNamespace: namespaceList[0]})
28+
})
29+
}
30+
931
render() {
1032
return (
1133
<div>
1234
<div>
1335
<NavBar />
1436
</div>
1537
<div>
16-
<NamespaceSelector />
38+
<NamespaceSelector
39+
namespaces={this.state.namespaces}
40+
selectedNamespace={this.state.selectedNamespace}
41+
onChange={this.nsChangeHandler}
42+
/>
1743
</div>
1844
<div>
19-
<SimpleTabs />
45+
<SimpleTabs namespace={this.state.selectedNamespace}/>
2046
</div>
2147
</div>
2248
);

src/components/NamespaceSelector.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,36 @@ const styles = theme => ({
2828
});
2929

3030
class NamespaceSelector extends React.Component {
31-
state = {
32-
selectedNamespace: '',
33-
namespaces: [],
34-
name: 'ns',
35-
labelWidth: 0,
36-
};
31+
constructor(props) {
32+
super(props);
33+
this.state = {
34+
selectedNamespace: '',
35+
namespaces: [],
36+
name: 'ns',
37+
labelWidth: 0
38+
};
39+
this.handleChange = this.handleChange.bind(this);
40+
}
3741

3842
componentDidMount() {
3943
this.setState({
4044
labelWidth: ReactDOM.findDOMNode(this.InputLabelRef).offsetWidth,
4145
});
42-
axios.get('/api/v1/namespaces/').then((response) => {
43-
const namespaceList = response.data.namespaces.map(namespace => namespace.name)
44-
console.log(namespaceList)
45-
this.setState({namespaces: namespaceList})
46-
})
4746
}
4847

4948
handleChange = event => {
50-
this.setState({ [event.target.name]: event.target.value });
49+
this.props.onChange(event.target.value);
5150
};
5251

52+
componentDidUpdate(prevProps) {
53+
if(this.props.namespaces != prevProps.namespaces) {
54+
this.setState({namespaces: this.props.namespaces});
55+
}
56+
if(this.props.selectedNamespace != prevProps.selectedNamespace) {
57+
this.setState({selectedNamespace: this.props.selectedNamespace});
58+
}
59+
}
60+
5361
render() {
5462
const { classes } = this.props;
5563

src/components/Tabs.js

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import AppBar from '@material-ui/core/AppBar';
55
import Tabs from '@material-ui/core/Tabs';
66
import Tab from '@material-ui/core/Tab';
77
import Typography from '@material-ui/core/Typography';
8-
import DatasetTable from './DatasetTable';
98
import MUIDataTable from "mui-datatables";
109
import axios from 'axios'
1110

@@ -19,6 +18,7 @@ function TabContainer(props) {
1918

2019
TabContainer.propTypes = {
2120
children: PropTypes.node.isRequired,
21+
selectedNamespace: PropTypes.node.isRequired
2222
};
2323

2424
const styles = theme => ({
@@ -35,20 +35,32 @@ class SimpleTabs extends React.Component {
3535
value: 0,
3636
jobs: [],
3737
datasets: [],
38+
namespace: null
3839
};
3940
}
4041

41-
componentDidMount(){
42-
axios.get('/api/v1/namespaces/demo/jobs/').then((response) => {
43-
const jobData = response.data
44-
const jobRows = jobData.jobs.map(job => [job.name, job.description, job.createdAt])
45-
this.setState({jobs: jobRows})
46-
})
47-
axios.get('/api/v1/namespaces/demo/datasets/').then((response) => {
42+
fetchData(namespace) {
43+
axios.get('/api/v1/namespaces/' + namespace + '/jobs/').then((response) => {
44+
const jobData = response.data
45+
const jobRows = jobData.jobs.map(job => [job.name, job.description, job.createdAt])
46+
this.setState({jobs: jobRows})
47+
});
48+
axios.get('/api/v1/namespaces/' + namespace + '/datasets/').then((response) => {
4849
const datasetData = response.data
4950
const datasetRows = datasetData.datasets.map(dataset => [dataset.name, dataset.createdAt])
5051
this.setState({datasets: datasetRows})
51-
})
52+
});
53+
}
54+
55+
componentDidMount(){
56+
this.fetchData(this.state.selectedNamespace);
57+
}
58+
59+
componentDidUpdate(prevProps) {
60+
if(this.props.namespace != prevProps.namespace) {
61+
this.setState({namespace: this.props.namespace});
62+
this.fetchData(this.props.namespace);
63+
}
5264
}
5365

5466
handleChange = (event, value) => {

0 commit comments

Comments
 (0)