/* * ============LICENSE_START======================================================= * Copyright (C) 2022 Nordix Foundation. * ================================================================================ * 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. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ import React, { useEffect, useState } from "react"; import Modal from "react-bootstrap/Modal"; import styled from "styled-components"; import Button from "react-bootstrap/Button"; import ACMService from "../../../api/ACMService"; import Alert from "react-bootstrap/Alert"; import * as PropTypes from "prop-types"; import InstantiationUtils from "./utils/InstantiationUtils"; import Row from "react-bootstrap/Row"; import Form from "react-bootstrap/Form"; const ModalStyled = styled(Modal)` @media (min-width: 800px) { .modal-xl { max-width: 96%; } } background-color: transparent; ` const DivWhiteSpaceStyled = styled.div` overflow: auto; min-width: 100%; max-height: 300px; padding: 5px 5px 0px 5px; text-align: center; ` const AlertStyled = styled(Alert)` margin-top: 10px; ` const templateName = "ToscaServiceTemplateSimple"; const templateVersion = "1.0.0"; function Fragment(props) { return null; } Fragment.propTypes = { children: PropTypes.node }; const InstancePropertiesModal = (props) => { const [show, setShow] = useState(true); const [toscaFullTemplate, setToscaFullTemplate] = useState({}); const [jsonEditor, setJsonEditor] = useState(null); const [alertMessage, setAlertMessage] = useState(null); const [instancePropertiesGlobal, setInstancePropertiesGlobal] = useState({}); const [serviceTemplateResponseOk, setServiceTemplateResponseOk] = useState(true); const [instancePropertiesResponseOk, setInstancePropertiesResponseOk] = useState(true); const [instanceName, setInstanceName] = useState('') useEffect(async () => { setJsonEditor(null); const toscaTemplateResponse = await ACMService.getToscaTemplate(templateName, templateVersion) .catch(error => error.message); const toscaInstanceProperties = await ACMService.getCommonOrInstanceProperties(templateName, templateVersion, false) .catch(error => error.message); if (!toscaInstanceProperties.ok) { const errorResponse = await toscaInstanceProperties.json(); console.log(errorResponse); setInstancePropertiesGlobal(errorResponse); setInstancePropertiesResponseOk(false); } if (!toscaTemplateResponse.ok) { const errorResponse = await toscaTemplateResponse.json(); console.log(errorResponse); setToscaFullTemplate(errorResponse); setServiceTemplateResponseOk(false); } if (toscaTemplateResponse.ok && toscaInstanceProperties.ok) { const renderedJsonSchema = await InstantiationUtils.parseJsonSchema(toscaTemplateResponse, toscaInstanceProperties); setToscaFullTemplate(await (renderedJsonSchema).fullTemplate); setJsonEditor(await (renderedJsonSchema).jsonEditor); } }, []); const handleClose = () => { console.log('handleClose called'); setShow(false); props.history.push('/'); } const handleInstanceName = (event) => { console.log('handleInstanceName called'); setInstanceName(event.target.value); } const handleSave = async () => { console.log("handleSave called"); if (instanceName !== '' || instanceName.length > 0) { console.log("instanceName to be saved is: " + instanceName); if (jsonEditor != null) { setToscaFullTemplate(InstantiationUtils.updateTemplate(instanceName, jsonEditor.getValue(), toscaFullTemplate)); } const response = await ACMService.createInstanceProperties(toscaFullTemplate) .catch(error => error.message); if (response.ok) { successAlert(); } else { await errorAlert(response); } } else { await warningAlert(); } } const warningAlert = async () => { console.log("warningAlert called"); setAlertMessage( Instantiation Properties Warning

Instance name cannot be empty


); } const successAlert = () => { console.log("successAlert called"); setAlertMessage( Instantiation Properties Success

Instance Properties was successfully saved


); } const errorAlert = async (response) => { console.log("errorAlert called"); setAlertMessage( Instantiation Properties Failure

An error occurred while trying to save

Status code: { await response.status } : { response.statusText }

Status Text: { await response.text() }


); } return ( Create Tosca Instance Properties
Instance Name:
Can't get service template:
{ JSON.stringify(toscaFullTemplate, null, 2) }
Can't get instance properties:
{ JSON.stringify(instancePropertiesGlobal, null, 2) }
{ alertMessage }
); } export default InstancePropertiesModal;