// Copyright 2021 99cloud // // 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. import React from 'react'; import { Select, Checkbox, Row, Col, Form } from 'antd'; import PropTypes from 'prop-types'; import InputInt from '../InputInt'; import styles from './index.less'; export default class InstanceVolume extends React.Component { static propTypes = { options: PropTypes.array, value: PropTypes.any, minSize: PropTypes.number, }; static defaultProps = { options: [], value: {}, minSize: 0, }; constructor(props) { super(props); const { type, size, deleteType } = props.value || {}; const { minSize } = props; this.state = { type, size, deleteType, minSize, }; } static getDerivedStateFromProps(nextProps, prevState) { if ( nextProps.options !== prevState.options || nextProps.minSize !== prevState.minSize ) { const { options, value, minSize } = nextProps; return { options, type: value.type, minSize, }; } return null; } componentDidMount() { this.onChange(); } checkVolume = (callback) => { const { type } = this.state; if (!type) { this.setState( { errorMsg: t('Please select a type!'), validateStatus: 'error', }, callback ); return; } this.setState( { errorMsg: undefined, validateStatus: 'success', }, callback ); }; onChange = () => { this.checkVolume(() => { const { onChange, options = [] } = this.props; if (onChange) { const { type, deleteType } = this.state; const deleteTypeLabel = deleteType === 1 ? t('Deleted with the instance') : t('Not deleted with the instance'); const typeOption = options.find((it) => it.value === type); const value = { ...this.state, deleteTypeLabel, typeOption, }; onChange(value); } }); }; onSelectChange = (value) => { this.setState( { type: value, }, this.onChange ); }; onInputChange = (value) => { this.setState( { size: value, }, this.onChange ); }; onDeleteChange = () => { const { deleteType } = this.state; this.setState( { deleteType: 1 - deleteType, }, this.onChange ); }; render() { const { options, type, size, deleteType, validateStatus, errorMsg, minSize, } = this.state; const { name } = this.props; const selects = (