// 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 = (
);
const input = (