Skip to content

Commit 458785c

Browse files
committed
Added in service logic.
1 parent 2486a40 commit 458785c

File tree

3 files changed

+115
-20
lines changed

3 files changed

+115
-20
lines changed

internal/ui/src/App.js

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,7 @@ export default class App extends React.Component {
2222
frontend: 'react',
2323
region: 'us-east-1',
2424
profile: 'default',
25-
services: [
26-
{
27-
name: "test service 1",
28-
description: "Things.",
29-
language: "go"
30-
}
31-
]
25+
services: []
3226
};
3327
}
3428

@@ -56,16 +50,16 @@ export default class App extends React.Component {
5650
this.setState({ profile: v });
5751
}
5852

59-
addServices = (s) => {
60-
let servicesArray = this.state.services.push(s);
61-
this.setState({ services: servicesArray });
53+
setServices = (s) => {
54+
this.setState({services: s});
6255
}
6356

6457
generate = () => {
6558
let self = this;
6659
axios.post('http://localhost:8080/v1/generate', {
6760
"projectName": self.state.projectName,
6861
"frontendFramework": self.state.frontend,
62+
"services": self.state.services,
6963
"infrastructure": {
7064
"aws": {
7165
"region": self.state.region,
@@ -99,7 +93,7 @@ export default class App extends React.Component {
9993
setRegion={this.setRegion}
10094
setProfile={this.setProfile} />
10195
<Frontend frontend={this.state.frontend} setFrontend={this.setFrontend} />
102-
<Services services={this.state.services} addService={this.addService} />
96+
<Services services={this.state.services} setServices={this.setServices} />
10397
<Divider variant="middle" />
10498
<GenerateButton generate={this.generate} />
10599
{this.state.success !== null && <Complete success={this.state.success} />}

internal/ui/src/Service.js

Lines changed: 95 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,111 @@
11
import React from 'react';
22
import TextField from '@material-ui/core/TextField';
3+
import List from '@material-ui/core/List';
4+
import ListItem from '@material-ui/core/ListItem';
5+
import ListItemText from '@material-ui/core/ListItemText';
6+
import MenuItem from '@material-ui/core/MenuItem';
7+
import Menu from '@material-ui/core/Menu';
8+
import { timeout } from 'q';
9+
import { timer } from 'rxjs';
310

4-
export default function Service() {
5-
return (
6-
<div className="service">
11+
export default class Service extends React.Component {
12+
constructor(props) {
13+
super(props);
14+
this.state = {
15+
name: "",
16+
description: "",
17+
language: "",
18+
anchorEl: null,
19+
}
20+
}
21+
22+
updateName = (event) => {
23+
this.setState({
24+
name: event.target.value
25+
}, () => {
26+
this.props.update(this.props.serviceID, this.state);
27+
})
28+
}
29+
30+
updateDesc = (event) => {
31+
this.setState({
32+
description: event.target.value
33+
}, () => {
34+
this.props.update(this.props.serviceID, this.state);
35+
})
36+
}
37+
38+
languages = [
39+
'go',
40+
'scala',
41+
'nodejs'
42+
];
43+
44+
setAnchorEl = element => {
45+
this.setState({ anchorEl: element })
46+
}
47+
48+
handleClickListItem = event => {
49+
this.setAnchorEl(event.currentTarget);
50+
};
51+
52+
handleMenuItemClick = (event, index) => {
53+
this.setAnchorEl(null);
54+
this.setState({ language: this.languages[index] }, () => {
55+
this.props.update(this.props.serviceID, this.state);
56+
});
57+
};
58+
59+
handleClose = () => {
60+
this.setAnchorEl(null);
61+
};
62+
63+
render() {
64+
return (
65+
<div className="service">
766
<TextField
867
id="standard-basic"
968
label="Name"
1069
margin="normal"
70+
onChange={this.updateName}
1171
/>
1272
<TextField
1373
id="standard-multiline-flexible"
1474
label="Description"
1575
multiline
1676
rowsMax="4"
17-
value=""
18-
onChange={null}
1977
margin="normal"
78+
onChange={this.updateDesc}
2079
/>
21-
</div>
22-
);
80+
<List component="nav" aria-label="language">
81+
<ListItem
82+
button
83+
aria-haspopup="true"
84+
aria-controls="lock-menu"
85+
aria-label="language"
86+
onClick={this.handleClickListItem}
87+
>
88+
<ListItemText primary="Language" secondary={this.state.language} />
89+
</ListItem>
90+
</List>
91+
<Menu
92+
id="lock-menu"
93+
anchorEl={this.state.anchorEl}
94+
keepMounted
95+
open={Boolean(this.state.anchorEl)}
96+
onClose={this.handleClose}
97+
>
98+
{this.languages.map((language, index) => (
99+
<MenuItem
100+
key={language}
101+
selected={index === this.state.selectedlanguage}
102+
onClick={event => this.handleMenuItemClick(event, index)}
103+
>
104+
{language}
105+
</MenuItem>
106+
))}
107+
</Menu>
108+
</div>
109+
);
110+
}
23111
}

internal/ui/src/Services.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,27 @@ import Service from './Service.js';
77
export default class Services extends React.Component {
88
constructor(props) {
99
super(props);
10+
this.state = {
11+
services: []
12+
}
13+
}
14+
15+
add = () => {
16+
this.state.services.push({ name: "", description: ""});
17+
this.props.setServices(this.state.services);
18+
}
19+
20+
update = (index, data) => {
21+
this.state.services[index] = data;
22+
this.props.setServices(this.state.services);
1023
}
1124
render() {
1225
return (
1326
<div className="services">
1427
<h2>Services</h2>
1528
<Grid container spacing={2} direction="column" alignItems="center">
16-
<Button variant="contained" color="default" onClick={event => this.props.addService}>+ Add Service</Button>
17-
{this.props.services.map((s, i) => <Service key={i} />)}
29+
<Button variant="contained" color="default" onClick={this.add}>+ Add Service</Button>
30+
{this.props.services.map((s, i) => <Service key={i} serviceID={i} update={this.update} />)}
1831
</Grid>
1932
</div>
2033
);

0 commit comments

Comments
 (0)