skyline/src/components/FormItem/InstanceVolume/index.jsx
Jingwei.Zhang f81ac5651a fix: Fix word spell
1. Add eslint plugin spellcheck to check word spell
2. Fix word spell

Change-Id: I73d39cf797ef5bdf993b0154816134a1e93f2ed4
2022-01-18 11:25:58 +08:00

192 lines
4.2 KiB
JavaScript

// 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 = (
<Select
value={type}
options={options}
onChange={this.onSelectChange}
className={styles.select}
placeholder={t('Please select type')}
/>
);
const input = (
<InputInt
value={size}
onChange={this.onInputChange}
min={minSize}
style={{ maxWidth: '60%' }}
/>
);
const deleteValue = deleteType === 1;
const checkbox = (
<Checkbox onChange={this.onDeleteChange} checked={deleteValue}>
{t('Deleted with the instance')}
</Checkbox>
);
return (
<Form.Item
className={styles['instance-volume']}
name={name}
validateStatus={validateStatus}
help={errorMsg}
>
<Row gutter={24}>
<Col span={8}>
<span className={styles.label}>{t('Type')}</span>
{selects}
</Col>
<Col span={14}>
<span className={styles.label}>{t('Size')}</span>
{input}
<span className={styles['size-label']}>GB</span>
{checkbox}
</Col>
</Row>
</Form.Item>
);
}
}