summaryrefslogtreecommitdiffstats
path: root/ui-react/src/components/dialogs/Loop
diff options
context:
space:
mode:
Diffstat (limited to 'ui-react/src/components/dialogs/Loop')
-rw-r--r--ui-react/src/components/dialogs/Loop/CreateLoopModal.js33
-rw-r--r--ui-react/src/components/dialogs/Loop/DeployLoopModal.js37
-rw-r--r--ui-react/src/components/dialogs/Loop/DeployLoopModal.test.js5
-rw-r--r--ui-react/src/components/dialogs/Loop/LoopPropertiesModal.js2
-rw-r--r--ui-react/src/components/dialogs/Loop/ModifyLoopModal.js43
-rw-r--r--ui-react/src/components/dialogs/Loop/OpenLoopModal.js40
-rw-r--r--ui-react/src/components/dialogs/Loop/__snapshots__/DeployLoopModal.test.js.snap3
-rw-r--r--ui-react/src/components/dialogs/Loop/__snapshots__/LoopPropertiesModal.test.js.snap2
-rw-r--r--ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap61
9 files changed, 173 insertions, 53 deletions
diff --git a/ui-react/src/components/dialogs/Loop/CreateLoopModal.js b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
index c5762a8d..e98b5956 100644
--- a/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/CreateLoopModal.js
@@ -34,13 +34,20 @@ import TemplateService from '../../../api/TemplateService';
const ModalStyled = styled(Modal)`
background-color: transparent;
`
-const LoopViewSvgDivStyled = styled.div`
- overflow: hidden;
+const LoopViewSvgDivStyled = styled.svg`
+ display: flex;
+ flex-direction: row;
+ overflow-x: scroll;
background-color: ${props => (props.theme.loopViewerBackgroundColor)};
border-color: ${props => (props.theme.loopViewerHeaderColor)};
+ margin-top: 3em;
margin-left: auto;
margin-right:auto;
+ margin-bottom: -1em;
text-align: center;
+ align-items: center;
+ height: 100%;
+ width: 100%;
`
export default class CreateLoopModal extends React.Component {
@@ -118,24 +125,28 @@ export default class CreateLoopModal extends React.Component {
render() {
return (
- <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
+ <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
<Modal.Header closeButton>
<Modal.Title>Create Model</Modal.Title>
</Modal.Header>
<Modal.Body>
<Form.Group as={Row} controlId="formPlaintextEmail">
- <Form.Label column sm="2">Template Name</Form.Label>
+ <Form.Label column sm="2">Template Name:</Form.Label>
<Col sm="10">
<Select onChange={this.handleDropdownListChange} options={this.state.templateNames} />
</Col>
</Form.Group>
- <Form.Group controlId="formPlaintextEmail">
- <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }} value={this.state.content} >
- </LoopViewSvgDivStyled>
- </Form.Group>
- <Form.Group controlId="formPlaintextEmail">
+ <Form.Group as={Row} style={{alignItems: 'center'}} controlId="formSvgPreview">
+ <Form.Label column sm="2">Model Preview:</Form.Label>
+ <Col sm="10">
+ <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }}
+ value={this.state.content} >
+ </LoopViewSvgDivStyled>
+ </Col>
+ </Form.Group>
+ <Form.Group as={Row} controlId="formPlaintextEmail">
<Form.Label column sm="2">Model Name:</Form.Label>
- <input type="text" style={{width: '50%'}}
+ <input type="text" style={{width: '50%', marginLeft: '1em' }}
value={this.state.modelName}
onChange={this.handleModelName}
/>
@@ -148,4 +159,4 @@ export default class CreateLoopModal extends React.Component {
</ModalStyled>
);
}
-} \ No newline at end of file
+}
diff --git a/ui-react/src/components/dialogs/Loop/DeployLoopModal.js b/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
index d034ee5d..2155977f 100644
--- a/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/DeployLoopModal.js
@@ -29,6 +29,12 @@ import Form from 'react-bootstrap/Form';
import Tabs from 'react-bootstrap/Tabs';
import Tab from 'react-bootstrap/Tab';
import styled from 'styled-components';
+import Spinner from 'react-bootstrap/Spinner'
+
+const StyledSpinnerDiv = styled.div`
+ justify-content: center !important;
+ display: flex !important;
+`;
const ModalStyled = styled(Modal)`
background-color: transparent;
@@ -48,6 +54,7 @@ export default class DeployLoopModal extends React.Component {
this.handleChange = this.handleChange.bind(this);
this.refreshStatus = this.refreshStatus.bind(this);
this.renderDeployParam = this.renderDeployParam.bind(this);
+ this.renderSpinner = this.renderSpinner.bind(this);
const propertiesJson = JSON.parse(JSON.stringify(this.props.loopCache.getGlobalProperties()));
this.state = {
@@ -79,31 +86,48 @@ export default class DeployLoopModal extends React.Component {
this.props.history.push('/');
}
+ renderSpinner() {
+ if (this.state.deploying) {
+ return (
+ <StyledSpinnerDiv>
+ <Spinner animation="border" role="status">
+ <span className="sr-only">Loading...</span>
+ </Spinner>
+ </StyledSpinnerDiv>
+ );
+ } else {
+ return (<div></div>);
+ }
+ }
+
handleSave() {
const loopName = this.props.loopCache.getLoopName();
// save the global propserties
+ this.setState({ deploying: true });
LoopService.updateGlobalProperties(loopName, this.state.temporaryPropertiesJson).then(resp => {
LoopActionService.performAction(loopName, "deploy").then(pars => {
- this.props.showAlert("Action deploy successfully performed");
+ this.props.showSucAlert("Action deploy successfully performed");
// refresh status and update loop logs
this.refreshStatus(loopName);
})
.catch(error => {
- this.props.showAlert("Action deploy failed");
+ this.props.showFailAlert("Action deploy failed");
// refresh status and update loop logs
this.refreshStatus(loopName);
});
});
- this.setState({ show: false });
- this.props.history.push('/');
}
refreshStatus(loopName) {
LoopActionService.refreshStatus(loopName).then(data => {
this.props.updateLoopFunction(data);
+ this.setState({ show: false, deploying: false });
+ this.props.history.push('/');
})
.catch(error => {
- this.props.showAlert("Refresh status failed");
+ this.props.showFailAlert("Refresh status failed");
+ this.setState({ show: false, deploying: false });
+ this.props.history.push('/');
});
}
handleChange(event) {
@@ -137,13 +161,14 @@ export default class DeployLoopModal extends React.Component {
}
render() {
return (
- <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} >
+ <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
<Modal.Header closeButton>
<Modal.Title>Deployment parameters</Modal.Title>
</Modal.Header>
<Tabs id="controlled-tab-example" activeKey={this.state.key} onSelect={key => this.setState({ key })}>
{this.renderDeployParamTabs()}
</Tabs>
+ {this.renderSpinner()}
<Modal.Footer>
<Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>
<Button variant="primary" type="submit" onClick={this.handleSave}>Deploy</Button>
diff --git a/ui-react/src/components/dialogs/Loop/DeployLoopModal.test.js b/ui-react/src/components/dialogs/Loop/DeployLoopModal.test.js
index 5f1dcd5f..84dbfd1f 100644
--- a/ui-react/src/components/dialogs/Loop/DeployLoopModal.test.js
+++ b/ui-react/src/components/dialogs/Loop/DeployLoopModal.test.js
@@ -63,7 +63,8 @@ describe('Verify DeployLoopModal', () => {
const flushPromises = () => new Promise(setImmediate);
const historyMock = { push: jest.fn() };
const updateLoopFunction = jest.fn();
- const showAlert = jest.fn();
+ const showSucAlert = jest.fn();
+ const showFailAlert = jest.fn();
const handleSave = jest.spyOn(DeployLoopModal.prototype,'handleSave');
LoopService.updateGlobalProperties = jest.fn().mockImplementation(() => {
return Promise.resolve({
@@ -88,7 +89,7 @@ describe('Verify DeployLoopModal', () => {
});
const component = shallow(<DeployLoopModal history={historyMock}
- loopCache={loopCache} updateLoopFunction={updateLoopFunction} showAlert={showAlert} />)
+ loopCache={loopCache} updateLoopFunction={updateLoopFunction} showSucAlert={showSucAlert} showFailAlert={showFailAlert} />)
component.find('[variant="primary"]').prop('onClick')();
await flushPromises();
diff --git a/ui-react/src/components/dialogs/Loop/LoopPropertiesModal.js b/ui-react/src/components/dialogs/Loop/LoopPropertiesModal.js
index 73946f45..c0a2084f 100644
--- a/ui-react/src/components/dialogs/Loop/LoopPropertiesModal.js
+++ b/ui-react/src/components/dialogs/Loop/LoopPropertiesModal.js
@@ -102,7 +102,7 @@ export default class LoopPropertiesModal extends React.Component {
render() {
return (
- <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} >
+ <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
<Modal.Header closeButton>
<Modal.Title>Model Properties</Modal.Title>
</Modal.Header>
diff --git a/ui-react/src/components/dialogs/Loop/ModifyLoopModal.js b/ui-react/src/components/dialogs/Loop/ModifyLoopModal.js
index 42c03dac..5154a880 100644
--- a/ui-react/src/components/dialogs/Loop/ModifyLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/ModifyLoopModal.js
@@ -37,7 +37,7 @@ import Search from '@material-ui/icons/Search';
import LoopService from '../../../api/LoopService';
import Tabs from 'react-bootstrap/Tabs';
import Tab from 'react-bootstrap/Tab';
-
+import Alert from 'react-bootstrap/Alert';
const ModalStyled = styled(Modal)`
background-color: transparent;
@@ -65,6 +65,7 @@ export default class ModifyLoopModal extends React.Component {
toscaPolicyModelsData: [],
selectedPolicyModelsData: [],
key: 'add',
+ showFailAlert: false,
toscaColumns: [
{ title: "#", field: "index", render: rowData => rowData.tableData.id + 1,
cellStyle: cellStyle,
@@ -78,6 +79,10 @@ export default class ModifyLoopModal extends React.Component {
cellStyle: cellStyle,
headerStyle: headerStyle
},
+ { title: "Policy Name", field: "policyName",
+ cellStyle: cellStyle,
+ headerStyle: headerStyle
+ },
{ title: "Version", field: "version",
cellStyle: cellStyle,
headerStyle: headerStyle
@@ -90,7 +95,7 @@ export default class ModifyLoopModal extends React.Component {
cellStyle: cellStyle,
headerStyle: headerStyle
},
- { title: "Add", field: "updatedDate", editable: 'never',
+ { title: "Created Date", field: "createdDate", editable: 'never',
cellStyle: cellStyle,
headerStyle: headerStyle
}
@@ -128,7 +133,9 @@ export default class ModifyLoopModal extends React.Component {
var operationalPolicies = this.state.loopCache.getOperationalPolicies();
var selectedPolicyModels = [];
for (var policy in operationalPolicies) {
- selectedPolicyModels.push(operationalPolicies[policy]["policyModel"]);
+ var newRow = operationalPolicies[policy]["policyModel"];
+ newRow["policyName"] = operationalPolicies[policy].name;
+ selectedPolicyModels.push(newRow);
}
PolicyToscaService.getToscaPolicyModels().then(allToscaModels => {
@@ -160,21 +167,36 @@ export default class ModifyLoopModal extends React.Component {
this.props.history.push('/');
}
+ renderAlert() {
+ return (
+ <div>
+ <Alert variant="danger" show={this.state.showFailAlert} onClose={this.disableAlert} dismissible>
+ {this.state.showMessage}
+ </Alert>
+ </div>
+ );
+ }
+
handleAdd() {
- LoopService.addOperationalPolicyType(this.state.loopCache.getLoopName(),this.state.selectedRowData.policyModelType,this.state.selectedRowData.version);
- this.props.loadLoopFunction(this.state.loopCache.getLoopName());
- this.handleClose();
+ LoopService.addOperationalPolicyType(this.state.loopCache.getLoopName(),this.state.selectedRowData.policyModelType,this.state.selectedRowData.version)
+ .then(pars => {
+ this.props.loadLoopFunction(this.state.loopCache.getLoopName());
+ this.handleClose();
+ })
+ .catch(error => {
+ this.setState({ showFailAlert: true, showMessage: "Adding failed with error: " + error.message});
+ });
}
handleRemove() {
- LoopService.removeOperationalPolicyType(this.state.loopCache.getLoopName(),this.state.selectedRowData.policyModelType,this.state.selectedRowData.version);
+ LoopService.removeOperationalPolicyType(this.state.loopCache.getLoopName(),this.state.selectedRowData.policyModelType,this.state.selectedRowData.version,this.state.selectedRowData.policyName);
this.props.loadLoopFunction(this.state.loopCache.getLoopName());
this.handleClose();
}
render() {
return (
- <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
+ <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
<Modal.Header closeButton>
<Modal.Title>Modify Loop Operational Policies</Modal.Title>
</Modal.Header>
@@ -192,18 +214,19 @@ export default class ModifyLoopModal extends React.Component {
rowStyle: rowData => ({
backgroundColor: (this.state.selectedRowData !== {} && this.state.selectedRowData.tableData !== undefined
&& this.state.selectedRowData.tableData.id === rowData.tableData.id) ? '#EEE' : '#FFF'
- })
+ })
}}
/>
<div>
<TextModal value={this.state.content} onChange={this.handleYamlContent}/>
</div>
</Modal.Body>
+ {this.renderAlert()}
</Tab>
<Tab eventKey="remove" title="Remove Operational Policies">
<Modal.Body>
<MaterialTable
- title={"Already added Tosca Policy Models"}
+ title={"Tosca Policy Models already added"}
data={this.state.selectedPolicyModelsData}
columns={this.state.toscaColumns}
icons={this.state.tableIcons}
diff --git a/ui-react/src/components/dialogs/Loop/OpenLoopModal.js b/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
index 7c98fab4..c0488344 100644
--- a/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
+++ b/ui-react/src/components/dialogs/Loop/OpenLoopModal.js
@@ -37,13 +37,20 @@ const ModalStyled = styled(Modal)`
const CheckBoxStyled = styled(FormCheck.Input)`
margin-left:3rem;
`
-const LoopViewSvgDivStyled = styled.div`
- overflow: hidden;
+const LoopViewSvgDivStyled = styled.svg`
+ overflow-x: scroll;
+ display: flex;
+ flex-direction: row;
background-color: ${props => (props.theme.loopViewerBackgroundColor)};
border-color: ${props => (props.theme.loopViewerHeaderColor)};
+ margin-top: 2em;
margin-left: auto;
margin-right:auto;
+ margin-bottom: -3em;
text-align: center;
+ align-items: center;
+ height: 100%;
+ width: 100%;
`
export default class OpenLoopModal extends React.Component {
@@ -54,6 +61,7 @@ export default class OpenLoopModal extends React.Component {
this.handleOpen = this.handleOpen.bind(this);
this.handleClose = this.handleClose.bind(this);
this.handleDropdownListChange = this.handleDropdownListChange.bind(this);
+ this.showReadOnly = props.showReadOnly ? props.showReadOnly : true;
this.state = {
show: true,
chosenLoopName: '',
@@ -101,28 +109,34 @@ export default class OpenLoopModal extends React.Component {
render() {
return (
- <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
+ <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose} backdrop="static" keyboard={false} >
<Modal.Header closeButton>
<Modal.Title>Open Model</Modal.Title>
</Modal.Header>
<Modal.Body>
<Form.Group as={Row} controlId="formPlaintextEmail">
- <Form.Label column sm="2">Model Name</Form.Label>
+ <Form.Label column sm="2">Model Name:</Form.Label>
<Col sm="10">
<Select onChange={this.handleDropdownListChange}
options={this.state.loopNames} />
</Col>
</Form.Group>
- <Form.Group controlId="formPlaintextEmail">
- <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }} value={this.state.content} >
- </LoopViewSvgDivStyled>
- </Form.Group>
- <Form.Group controlId="formBasicChecbox">
- <Form.Check>
- <FormCheck.Label>Read Only</FormCheck.Label>
- <CheckBoxStyled type="checkbox" />
- </Form.Check>
+ <Form.Group as={Row} style={{alignItems: 'center'}} controlId="formSvgPreview">
+ <Form.Label column sm="2">Model Preview:</Form.Label>
+ <Col sm="10">
+ <LoopViewSvgDivStyled dangerouslySetInnerHTML={{ __html: this.state.content }}
+ value={this.state.content} >
+ </LoopViewSvgDivStyled>
+ </Col>
</Form.Group>
+ {this.showReadOnly === true ?
+ <Form.Group as={Row} controlId="formBasicChecbox">
+ <Form.Check>
+ <FormCheck.Label>Read Only Mode:</FormCheck.Label>
+ <CheckBoxStyled style={{marginLeft: '3.5em'}} type="checkbox" />
+ </Form.Check>
+ </Form.Group>
+ : null}
</Modal.Body>
<Modal.Footer>
<Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>
diff --git a/ui-react/src/components/dialogs/Loop/__snapshots__/DeployLoopModal.test.js.snap b/ui-react/src/components/dialogs/Loop/__snapshots__/DeployLoopModal.test.js.snap
index 0f86aa34..8d0faa5f 100644
--- a/ui-react/src/components/dialogs/Loop/__snapshots__/DeployLoopModal.test.js.snap
+++ b/ui-react/src/components/dialogs/Loop/__snapshots__/DeployLoopModal.test.js.snap
@@ -2,6 +2,8 @@
exports[`Verify DeployLoopModal Test the render method 1`] = `
<Styled(Bootstrap(Modal))
+ backdrop="static"
+ keyboard={false}
onHide={[Function]}
show={true}
size="lg"
@@ -56,6 +58,7 @@ exports[`Verify DeployLoopModal Test the render method 1`] = `
</Styled(FormGroup)>
</Tab>
</Tabs>
+ <div />
<ModalFooter>
<Button
active={false}
diff --git a/ui-react/src/components/dialogs/Loop/__snapshots__/LoopPropertiesModal.test.js.snap b/ui-react/src/components/dialogs/Loop/__snapshots__/LoopPropertiesModal.test.js.snap
index fe9aee2a..233c560a 100644
--- a/ui-react/src/components/dialogs/Loop/__snapshots__/LoopPropertiesModal.test.js.snap
+++ b/ui-react/src/components/dialogs/Loop/__snapshots__/LoopPropertiesModal.test.js.snap
@@ -2,6 +2,8 @@
exports[`Verify LoopPropertiesModal Test the render method 1`] = `
<Styled(Bootstrap(Modal))
+ backdrop="static"
+ keyboard={false}
onHide={[Function]}
show={true}
size="lg"
diff --git a/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap b/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
index 1aa0b5ae..19685444 100644
--- a/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
+++ b/ui-react/src/components/dialogs/Loop/__snapshots__/OpenLoopModal.test.js.snap
@@ -2,6 +2,8 @@
exports[`Verify OpenLoopModal Test the render method 1`] = `
<Styled(Bootstrap(Modal))
+ backdrop="static"
+ keyboard={false}
onHide={[Function]}
show={true}
size="xl"
@@ -32,7 +34,7 @@ exports[`Verify OpenLoopModal Test the render method 1`] = `
sm="2"
srOnly={false}
>
- Model Name
+ Model Name:
</FormLabel>
<Col
sm="10"
@@ -47,18 +49,52 @@ exports[`Verify OpenLoopModal Test the render method 1`] = `
</Col>
</FormGroup>
<FormGroup
- controlId="formPlaintextEmail"
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
+ controlId="formSvgPreview"
+ style={
+ Object {
+ "alignItems": "center",
+ }
+ }
>
- <styled.div
- dangerouslySetInnerHTML={
- Object {
- "__html": "",
+ <FormLabel
+ column={true}
+ sm="2"
+ srOnly={false}
+ >
+ Model Preview:
+ </FormLabel>
+ <Col
+ sm="10"
+ >
+ <styled.svg
+ dangerouslySetInnerHTML={
+ Object {
+ "__html": "",
+ }
}
- }
- value=""
- />
+ value=""
+ />
+ </Col>
</FormGroup>
<FormGroup
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
controlId="formBasicChecbox"
>
<FormCheck
@@ -70,9 +106,14 @@ exports[`Verify OpenLoopModal Test the render method 1`] = `
type="checkbox"
>
<FormCheckLabel>
- Read Only
+ Read Only Mode:
</FormCheckLabel>
<Styled(FormCheckInput)
+ style={
+ Object {
+ "marginLeft": "3.5em",
+ }
+ }
type="checkbox"
/>
</FormCheck>