diff options
Diffstat (limited to 'ui-react/src/components/dialogs')
5 files changed, 335 insertions, 14 deletions
diff --git a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js index 1a8b6e2c..8178bf47 100644 --- a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js +++ b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js @@ -24,8 +24,9 @@ import React from 'react' import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; -import { LOOP_CACHE } from '../../../api/LoopCache' import styled from 'styled-components'; +import LoopService from '../../../api/LoopService'; +import JSONEditor from '@json-editor/json-editor'; const ModalStyled = styled(Modal)` background-color: transparent; @@ -33,23 +34,71 @@ const ModalStyled = styled(Modal)` export default class ConfigurationPolicyModal extends React.Component { + state = { + show: true, + loopCache: this.props.loopCache, + jsonEditor: null, + componentName: "", + }; + constructor(props, context) { super(props, context); - this.handleClose = this.handleClose.bind(this); + this.handleSave = this.handleSave.bind(this); + this.renderJsonEditor = this.renderJsonEditor.bind(this); + this.state.componentName = props.match.params.componentName; + } - this.state = { - show: true, - }; + handleSave() { + var errors = this.state.jsonEditor.validate(); + var editorData = this.state.jsonEditor.getValue(); + + if (errors.length !== 0) { + console.error("Errors detected during config policy data validation ", errors); + } + else { + console.info("NO validation errors found in config policy data"); + this.state.loopCache.updateMicroServiceProperties(this.state.componentName, editorData[0]); + LoopService.setMicroServiceProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getMicroServiceForName(this.state.componentName)); + } + + this.setState({ show: false }); + this.props.history.push('/'); } handleClose() { this.setState({ show: false }); - this.props.history.push('/') + this.props.history.push('/'); } + componentDidMount() { + this.renderJsonEditor(); + } + + renderJsonEditor() { + console.debug("Rendering ConfigurationPolicyModal ", this.state.componentName); + var toscaModel = this.state.loopCache.getMicroServiceJsonRepresentationForName(this.state.componentName); + if (toscaModel == null) { + return; + } + var editorData = this.state.loopCache.getMicroServicePropertiesForName(this.state.componentName); + + JSONEditor.defaults.options.theme = 'bootstrap4'; + //JSONEditor.defaults.options.iconlib = 'bootstrap2'; + JSONEditor.defaults.options.object_layout = 'grid'; + JSONEditor.defaults.options.disable_properties = true; + JSONEditor.defaults.options.disable_edit_json = false; + JSONEditor.defaults.options.disable_array_reorder = true; + JSONEditor.defaults.options.disable_array_delete_last_row = true; + JSONEditor.defaults.options.disable_array_delete_all_rows = false; + JSONEditor.defaults.options.show_errors = 'always'; + this.setState({ + jsonEditor: new JSONEditor(document.getElementById("editor"), + { schema: toscaModel.schema, startval: editorData }) + }) + } render() { return ( @@ -58,15 +107,14 @@ export default class ConfigurationPolicyModal extends React.Component { <Modal.Title>Configuration policies</Modal.Title> </Modal.Header> <Modal.Body> - - + <div id="editor" /> </Modal.Body> <Modal.Footer> <Button variant="secondary" onClick={this.handleClose}> Close </Button> - <Button variant="primary" onClick={this.handleClose}> + <Button variant="primary" onClick={this.handleSave}> Save Changes </Button> </Modal.Footer> diff --git a/ui-react/src/components/dialogs/LoopProperties.js b/ui-react/src/components/dialogs/LoopProperties.js new file mode 100644 index 00000000..2cde8d46 --- /dev/null +++ b/ui-react/src/components/dialogs/LoopProperties.js @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +import React from 'react' +import Button from 'react-bootstrap/Button'; +import Modal from 'react-bootstrap/Modal'; +import Form from 'react-bootstrap/Form'; +import styled from 'styled-components'; +import LoopService from '../../api/LoopService'; + +const ModalStyled = styled(Modal)` + background-color: transparent; +` + +export default class LoopProperties extends React.Component { + + formProps = {dcaeDeployParameters: { + "location_id": "", + "service_id": "", + "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca" + }}; + + constructor(props, context) { + super(props, context); + + this.handleClose = this.handleClose.bind(this); + this.handleChange = this.handleChange.bind(this); + this.saveProperties = this.saveProperties.bind(this); + this.initialValues = this.initialValues.bind(this); + this.state = { + show: true, + loopName: 'LOOP_h2NMX_v1_0_ResourceInstanceName1_tca', + form: this.formProps + }; + + } + initialValues() { + const updatedForm = this.state.form; + Object.keys(updatedForm).forEach((key) => { + if (key === 'dcaeDeployParameters') { + updatedForm[key] = JSON.stringify(this.state.form[key]); + } else { + updatedForm[key] = this.state.form[key]; + } + this.setState({ form: updatedForm }); + }); + } + handleClose() { + this.props.history.push('/'); + } + handleChange(e) { + const formUpdated = this.state.form; + formUpdated[e.target.name] = e.target.value; + this.setState({ form: formUpdated }); + }; + saveProperties(event) { + // translate the deploymentParameter into jsonFormat at submit time + const updatedForm = this.state.form; + Object.keys(updatedForm).forEach((key) => { + if (key === 'dcaeDeployParameters') { + try { + let value = JSON.parse(updatedForm[key]); + updatedForm[key] = value; + // save Properties + this.setState( {form: updatedForm} ); + LoopService.updateGlobalProperties(this.state.loopName, this.state.form); + this.props.history.push('/'); + } catch (error) { + alert("Deployment Parameters is not in good Json format. Please correct it."); + } + } + }); + } + render() { + return ( + <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} onEntered={this.initialValues}> + <Modal.Header closeButton> + <Modal.Title>Model Properties</Modal.Title> + </Modal.Header> + <Modal.Body> + <Form.Group controlId="exampleForm.ControlTextarea1"> + <Form.Label>Deploy Parameters</Form.Label> + <Form.Control as="textarea" rows="3" name="dcaeDeployParameters" onChange={this.handleChange} defaultValue={this.state.form["dcaeDeployParameters"]}/> + </Form.Group> + </Modal.Body> + <Modal.Footer> + <Button variant="secondary" type="null" onClick={this.handleClose}>Cacel</Button> + <Button variant="primary" type="submit" onClick={this.saveProperties}>Save</Button> + </Modal.Footer> + </ModalStyled> + ); + } +} diff --git a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js index 6986209d..0bf71580 100644 --- a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js +++ b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.js @@ -54,7 +54,7 @@ export default class OpenLoopModal extends React.Component { }; } - componentDidMount() { + componentWillMount() { this.getLoopNames(); } @@ -110,7 +110,7 @@ export default class OpenLoopModal extends React.Component { </Modal.Body> <Modal.Footer> <Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button> - <Button variant="primary" type="submit" onClick={this.handleOpen}>OK</Button> + <Button variant="primary" type="submit" onClick={this.handleOpen}>Open</Button> </Modal.Footer> </ModalStyled> diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js index 6822f3ff..2a812c87 100644 --- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js +++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js @@ -217,7 +217,7 @@ export default class OperationalPolicyModal extends React.Component { </div> <span id="formSpan" style={{ display: 'none' }}> - <form className="policyProperties" className="form-horizontal" + <form className="policyProperties form-horizontal" style={{ border: '2px dotted gray' }} title="Operational Policy Properties"> <div className="form-group clearfix"> @@ -350,7 +350,7 @@ export default class OperationalPolicyModal extends React.Component { </div> </div> </form> - <form className="policyTarget" className="form-horizontal" + <form className="policyTarget form-horizontal" title="Operational Policy Target" style={{ border: '2px dotted gray' }}> <div className="form-group clearfix"> <label htmlFor="type" className="col-sm-4 control-label"> Target @@ -437,7 +437,7 @@ export default class OperationalPolicyModal extends React.Component { </select> </div> </div> - <form className="guardProperties" className="form-horizontal" + <form className="guardProperties form-horizontal" title="Guard policy associated" style={{ border: '2px dotted gray' }}> <div className="form-group clearfix withnote"> diff --git a/ui-react/src/components/dialogs/UserInfo.js b/ui-react/src/components/dialogs/UserInfo.js new file mode 100644 index 00000000..a8ef717b --- /dev/null +++ b/ui-react/src/components/dialogs/UserInfo.js @@ -0,0 +1,161 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +import React from 'react' +import Button from 'react-bootstrap/Button'; +import Modal from 'react-bootstrap/Modal'; +import Form from 'react-bootstrap/Form'; +import Row from 'react-bootstrap/Row'; +import Col from 'react-bootstrap/Col'; +import styled from 'styled-components'; +import UserService from '../../api/UserService'; + +const ModalStyled = styled(Modal)` + background-color: transparent; +` + +export default class UserInfo extends React.Component { + + constructor(props, context) { + super(props, context); + + this.handleClose = this.handleClose.bind(this); + this.initialValues = this.initialValues.bind(this); + this.renderReadTemplatePermission = this.renderReadTemplatePermission.bind(this); + this.renderReadModelPermission = this.renderReadModelPermission.bind(this); + this.renderReadToscaPermission = this.renderReadToscaPermission.bind(this); + this.renderUpdateTemplatePermission = this.renderUpdateTemplatePermission.bind(this); + this.renderUpdateModelPermission = this.renderUpdateModelPermission.bind(this); + this.renderUpdateToscaPermission = this.renderUpdateToscaPermission.bind(this); + this.renderUserName = this.renderUserName.bind(this); + this.state = { + show: true, + userInfo: {permissionReadTemplate: true, + permissionReadCl: true, + permissionReadTosca: true, + permissionUpdateCl: true, + permissionUpdateTemplate: true, + permissionUpdateTosca: true, + userName: 'admin', + cldsVersion: '1.0.0' + } + }; + + } + initialValues() { + UserService.getUserInfo().then(userInfo => { + this.setState({ userInfo: userInfo }) + }); + } + handleClose() { + this.props.history.push('/'); + } + renderReadTemplatePermission() { + if (this.state.userInfo["permissionReadTemplate"]) { + return <Form.Control plaintext readOnly defaultValue="Read Template" /> + } else { + return; + } + } + renderReadModelPermission() { + if (this.state.userInfo["permissionReadCl"]) { + return <Form.Control plaintext readOnly defaultValue="Read Model" /> + } else { + return; + } + } + renderReadToscaPermission() { + if (this.state.userInfo["permissionReadTosca"]) { + return <Form.Control plaintext readOnly defaultValue="Read Tosca" /> + } else { + return; + } + } + renderUpdateTemplatePermission() { + if (this.state.userInfo["permissionUpdateTemplate"]) { + return <Form.Control plaintext readOnly defaultValue="Edit Template" /> + } else { + return; + } + } + renderUpdateModelPermission() { + if (this.state.userInfo["permissionUpdateCl"]) { + return <Form.Control plaintext readOnly defaultValue="Edit Model" /> + } else { + return; + } + } + renderUpdateToscaPermission() { + if (this.state.userInfo["permissionUpdateTosca"]) { + return <Form.Control plaintext readOnly defaultValue="Edit Tosca" /> + } else { + return; + } + } + renderUserName() { + if (this.state.userInfo["userName"]) { + return <Form.Control plaintext readOnly defaultValue={this.state.userInfo["userName"]} /> + } else { + return; + } + } + renderVersion() { + if (this.state.userInfo["cldsVersion"]) { + return <Form.Control plaintext readOnly defaultValue={this.state.userInfo["cldsVersion"]} /> + } else { + return; + } + } + render() { + return ( + <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} onEntered={this.initialValues}> + <Modal.Header closeButton> + <Modal.Title>User Info</Modal.Title> + </Modal.Header> + <Modal.Body> + <Form.Group as={Row} controlId="userName"> + <Form.Label column sm="3">Current User:</Form.Label> + <Col>{this.renderUserName()}</Col> + </Form.Group> + <Form.Group as={Row} controlId="cldsVersion"> + <Form.Label column sm="3">CLDS Version:</Form.Label> + <Col>{this.renderVersion()}</Col> + </Form.Group> + <Form.Group as={Row} controlId="userPermissions"> + <Form.Label column sm="3">User Permissions:</Form.Label> + <Col> + {this.renderReadTemplatePermission()} + {this.renderReadModelPermission()} + {this.renderReadToscaPermission()} + {this.renderUpdateTemplatePermission()} + {this.renderUpdateModelPermission()} + {this.renderUpdateToscaPermission()} + </Col> + </Form.Group> + </Modal.Body> + <Modal.Footer> + <Button variant="secondary" type="null" onClick={this.handleClose}>Cacel</Button> + </Modal.Footer> + </ModalStyled> + ); + } +} |