/* * ============LICENSE_START======================================================= * Copyright (C) 2021 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 styled from "styled-components"; import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; import React, { useEffect, useState } from "react"; import InstantiationOrderStateChangeItem from "./InstantiationOrderStateChangeItem"; import ControlLoopService from "../../../api/ControlLoopService"; import { Alert, Container, Dropdown } from "react-bootstrap"; 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 ChangeOrderStateModal = (props) => { const [show, setShow] = useState(true); const [controlLoopIdentifierList, setControlLoopIdentifierList] = useState([]); const [orderedState, setOrderedState] = useState(''); const [toscaOrderStateObject, setToscaOrderStateObject] = useState({}); const [instantiationOrderStateError, setInstantiationOrderStateError] = useState(false); const [instantiationOrderStateMsgError, setInstantiationOrderStateMsgError] = useState({}); const [alertMessage, setAlertMessage] = useState(null); useEffect(async () => { const instantiationOrderState = await ControlLoopService.getInstanceOrderState( props.location.instantiationName, props.location.instantiationVersion) .catch(error => error.message); const orderStateJson = await instantiationOrderState.json(); console.log(orderStateJson); if (!instantiationOrderState.ok || orderStateJson['controlLoopIdentifierList'].length === 0) { setInstantiationOrderStateError(true); setInstantiationOrderStateMsgError(orderStateJson); } else { setControlLoopIdentifierList(orderStateJson['controlLoopIdentifierList']); setOrderedState(orderStateJson['orderedState']); } }, []); const handleDropSelect = (event) => { console.log("handleDropDownChange called"); const stateChangeObject = { orderedState: event, controlLoopIdentifierList: controlLoopIdentifierList } setToscaOrderStateObject(stateChangeObject); setOrderedState(event); } const handleSave = async () => { console.log("handleSave called"); const response = await ControlLoopService.changeInstanceOrderState(toscaOrderStateObject) .catch(error => error.message); if (response.ok) { successAlert(); } else { await errorAlert(response); } } const handleClose = () => { console.log('handleClose called'); setShow(false); props.history.push('/'); } const successAlert = () => { console.log("successAlert called"); setAlertMessage(<Alert variant="success"> <Alert.Heading>Order State Changed Success</Alert.Heading> <p>Order State Changed was successfully changed</p> <hr/> </Alert>); } const errorAlert = async (response) => { console.log("errorAlert called"); setAlertMessage(<Alert variant="danger"> <Alert.Heading>Order State Changed Failure</Alert.Heading> <p>An error occurred while trying to change order state</p> <p>Status code: { await response.status } : { response.statusText }</p> <p>Status Text: { await response.text() }</p> <hr/> </Alert>); } return ( <ModalStyled size="sm" show={ show } onHide={ handleClose } backdrop="static" keyboard={ false }> <Modal.Header closeButton> <Modal.Title>Manage Instantiation</Modal.Title> </Modal.Header> <div style={ { padding: '5px 5px 0 5px' } }> <Modal.Body> <Container> <Dropdown onSelect={ handleDropSelect }> <Dropdown.Toggle variant="dark" id="dropdown-basic"> Select Order State </Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item eventKey="UNINITIALISED">UNINITIALISED</Dropdown.Item> <Dropdown.Item eventKey="PASSIVE">PASSIVE</Dropdown.Item> <Dropdown.Item eventKey="RUNNING">RUNNING</Dropdown.Item> </Dropdown.Menu> </Dropdown> { controlLoopIdentifierList.map((clIdList, index) => ( <InstantiationOrderStateChangeItem title={ clIdList.name } orderState={ orderedState } index={ index } key={ index }/> )) } </Container> <AlertStyled show={ instantiationOrderStateError } variant="danger">Can't get instantiation ordered state:<br/>{ JSON.stringify(instantiationOrderStateMsgError, null, 2) }</AlertStyled> </Modal.Body> <DivWhiteSpaceStyled> { alertMessage } </DivWhiteSpaceStyled> </div> <Modal.Footer> <Button variant="primary" onClick={ handleSave }>Save</Button> <Button variant="secondary" onClick={ handleClose }>Close</Button> </Modal.Footer> </ModalStyled> ); } export default ChangeOrderStateModal;