|
|
@@ -6,7 +6,6 @@ import { Section, FormElement } from '../../shared/types';
|
|
|
import { Context } from '../../shared/Context';
|
|
|
import api from '../../shared/api';
|
|
|
|
|
|
-import SaveButton from '../SaveButton';
|
|
|
import CheckboxRow from './CheckboxRow';
|
|
|
import InputRow from './InputRow';
|
|
|
import SelectRow from './SelectRow';
|
|
|
@@ -15,55 +14,24 @@ import Heading from './Heading';
|
|
|
import ResourceTab from '../ResourceTab';
|
|
|
|
|
|
type PropsType = {
|
|
|
- onSubmit: (formValues: any) => void,
|
|
|
sections?: Section[],
|
|
|
- disabled?: boolean,
|
|
|
- saveValuesStatus?: string | null,
|
|
|
+ metaState?: any,
|
|
|
+ setMetaState?: any,
|
|
|
};
|
|
|
|
|
|
type StateType = any;
|
|
|
|
|
|
export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
-
|
|
|
- updateFormState() {
|
|
|
- let formState: any = {};
|
|
|
- this.props.sections.forEach((section: Section, i: number) => {
|
|
|
- section.contents.forEach((item: FormElement, i: number) => {
|
|
|
-
|
|
|
- // If no name is assigned use values.yaml variable as identifier
|
|
|
- let key = item.name || item.variable;
|
|
|
-
|
|
|
- let def = (item.value && item.value[0]) || (item.settings && item.settings.default);
|
|
|
-
|
|
|
- switch (item.type) {
|
|
|
- case 'checkbox':
|
|
|
- formState[key] = def ? def : false;
|
|
|
- break;
|
|
|
- case 'string-input':
|
|
|
- formState[key] = def ? def : '';
|
|
|
- break;
|
|
|
- case 'number-input':
|
|
|
- formState[key] = def.toString() ? def : '';
|
|
|
- break;
|
|
|
- case 'select':
|
|
|
- formState[key] = def ? def : item.settings.options[0].value;
|
|
|
- break;
|
|
|
- default:
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
- this.setState(formState);
|
|
|
- }
|
|
|
-
|
|
|
- // Initialize corresponding state fields for form blocks
|
|
|
componentDidMount() {
|
|
|
- this.updateFormState();
|
|
|
+ console.log('hola senorita')
|
|
|
}
|
|
|
-
|
|
|
- componentDidUpdate(prevProps: PropsType) {
|
|
|
- if (this.props.sections !== prevProps.sections) {
|
|
|
- this.updateFormState();
|
|
|
+ getInputValue = (item: FormElement) => {
|
|
|
+ let key = item.name || item.variable;
|
|
|
+ let value = this.props.metaState[key];
|
|
|
+ if (item.settings && item.settings.unit && value) {
|
|
|
+ value = value.split(item.settings.unit)[0]
|
|
|
}
|
|
|
+ return value;
|
|
|
}
|
|
|
|
|
|
renderSection = (section: Section) => {
|
|
|
@@ -96,8 +64,8 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
return (
|
|
|
<CheckboxRow
|
|
|
key={i}
|
|
|
- checked={this.state[key]}
|
|
|
- toggle={() => this.setState({ [key]: !this.state[key] })}
|
|
|
+ checked={this.props.metaState[key]}
|
|
|
+ toggle={() => this.props.setMetaState({ [key]: !this.props.metaState[key] })}
|
|
|
label={item.label}
|
|
|
/>
|
|
|
);
|
|
|
@@ -105,9 +73,15 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
return (
|
|
|
<InputRow
|
|
|
key={i}
|
|
|
+ isRequired={item.required}
|
|
|
type='text'
|
|
|
- value={this.state[key]}
|
|
|
- setValue={(x: string) => this.setState({ [key]: x })}
|
|
|
+ value={this.getInputValue(item)}
|
|
|
+ setValue={(x: string) => {
|
|
|
+ if (item.settings && item.settings.unit && x !== '') {
|
|
|
+ x = x + item.settings.unit;
|
|
|
+ }
|
|
|
+ this.props.setMetaState({ [key]: x });
|
|
|
+ }}
|
|
|
label={item.label}
|
|
|
unit={item.settings ? item.settings.unit : null}
|
|
|
/>
|
|
|
@@ -116,9 +90,18 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
return (
|
|
|
<InputRow
|
|
|
key={i}
|
|
|
+ isRequired={item.required}
|
|
|
type='number'
|
|
|
- value={this.state[key]}
|
|
|
- setValue={(x: number) => this.setState({ [key]: x })}
|
|
|
+ value={this.getInputValue(item)}
|
|
|
+ setValue={(x: number) => {
|
|
|
+ let val = x.toString();
|
|
|
+ if (Number.isNaN(x)) {
|
|
|
+ val = '';
|
|
|
+ } else if (item.settings && item.settings.unit) {
|
|
|
+ val = val + item.settings.unit;
|
|
|
+ }
|
|
|
+ this.props.setMetaState({ [key]: val });
|
|
|
+ }}
|
|
|
label={item.label}
|
|
|
unit={item.settings ? item.settings.unit : null}
|
|
|
/>
|
|
|
@@ -127,8 +110,8 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
return (
|
|
|
<SelectRow
|
|
|
key={i}
|
|
|
- value={this.state[key]}
|
|
|
- setActiveValue={(val) => this.setState({ [key]: val })}
|
|
|
+ value={this.props.metaState[key]}
|
|
|
+ setActiveValue={(val) => this.props.setMetaState({ [key]: val })}
|
|
|
options={item.settings.options}
|
|
|
dropdownLabel=''
|
|
|
label={item.label}
|
|
|
@@ -140,11 +123,11 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
}
|
|
|
|
|
|
renderFormContents = () => {
|
|
|
- if (this.state) {
|
|
|
+ if (this.props.metaState) {
|
|
|
return this.props.sections.map((section: Section, i: number) => {
|
|
|
// Hide collapsible section if deciding field is false
|
|
|
if (section.show_if) {
|
|
|
- if (!this.state[section.show_if]) {
|
|
|
+ if (!this.props.metaState[section.show_if]) {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
@@ -160,19 +143,10 @@ export default class ValuesForm extends Component<PropsType, StateType> {
|
|
|
|
|
|
render() {
|
|
|
return (
|
|
|
- <Wrapper>
|
|
|
- <StyledValuesForm>
|
|
|
- <DarkMatter />
|
|
|
- {this.renderFormContents()}
|
|
|
- </StyledValuesForm>
|
|
|
- <SaveButton
|
|
|
- disabled={this.props.disabled}
|
|
|
- text='Deploy'
|
|
|
- onClick={() => this.props.onSubmit(this.state)}
|
|
|
- status={this.props.saveValuesStatus}
|
|
|
- makeFlush={true}
|
|
|
- />
|
|
|
- </Wrapper>
|
|
|
+ <StyledValuesForm>
|
|
|
+ <DarkMatter />
|
|
|
+ {this.renderFormContents()}
|
|
|
+ </StyledValuesForm>
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
@@ -188,11 +162,6 @@ const DarkMatter = styled.div`
|
|
|
margin-top: 0px;
|
|
|
`;
|
|
|
|
|
|
-const Wrapper = styled.div`
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
-`;
|
|
|
-
|
|
|
const StyledValuesForm = styled.div`
|
|
|
width: 100%;
|
|
|
height: 100%;
|