import React, { Component } from 'react'; import styled from 'styled-components'; import _ from 'lodash'; import { Section, FormElement } from '../../shared/types'; import { Context } from '../../shared/Context'; import api from '../../shared/api'; import CheckboxRow from './CheckboxRow'; import InputRow from './InputRow'; import Base64InputRow from './Base64InputRow'; import SelectRow from './SelectRow'; import Helper from './Helper'; import Heading from './Heading'; import ExpandableResource from '../ExpandableResource'; import VeleroForm from '../forms/VeleroForm'; let dummySections = [ { "name":"section_one", "show_if":"", "contents":[ { "type":"heading", "label":"Polyphia", }, { "type":"subtitle", "label":"Tim Hendrix", }, { "type":"velero-create-backup", "label":"Tim Hendrix", }, ] } ]; type PropsType = { sections?: Section[], metaState?: any, setMetaState?: any, }; type StateType = any; export default class ValuesForm extends Component { 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) => { return section.contents.map((item: FormElement, i: number) => { // If no name is assigned use values.yaml variable as identifier let key = item.name || item.variable; switch (item.type) { case 'heading': return {item.label}; case 'subtitle': return {item.label}; case 'resource-list': if (Array.isArray(item.value)) { return ( { item.value.map((resource: any, i: number) => { return ( ); }) } ); } case 'checkbox': return ( this.props.setMetaState({ [key]: !this.props.metaState[key] })} label={item.label} /> ); case 'array-input': return ( { this.props.setMetaState({ [key]: [x] }); }} label={item.label} unit={item.settings ? item.settings.unit : null} /> ); case 'string-input': return ( { 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} /> ); case 'number-input': return ( { let val: string | number = x; if (Number.isNaN(x)) { val = '' } // Convert to string if unit is set if (item.settings && item.settings.unit) { val = x.toString(); val = val + item.settings.unit; } this.props.setMetaState({ [key]: val }); }} label={item.label} unit={item.settings ? item.settings.unit : null} /> ); case 'select': return ( this.props.setMetaState({ [key]: val })} options={item.settings.options} dropdownLabel='' label={item.label} /> ); case 'velero-create-backup': return ( ); case 'base-64': return ( { if (item.settings && item.settings.unit && x !== '') { x = x + item.settings.unit; } this.props.setMetaState({ [key]: btoa(x) }); }} label={item.label} unit={item.settings ? item.settings.unit : null} /> ); case 'base-64-password': return ( { if (item.settings && item.settings.unit && x !== '') { x = x + item.settings.unit; } this.props.setMetaState({ [key]: btoa(x) }); }} label={item.label} unit={item.settings ? item.settings.unit : null} /> ); default: } }); } renderFormContents = () => { 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.props.metaState[section.show_if]) { return null; } } return (
{this.renderSection(section)}
); }); } } render() { return ( {this.renderFormContents()} ); } } ValuesForm.contextType = Context; const ResourceList = styled.div` margin-bottom: 15px; margin-top: 20px; border-radius: 5px; overflow: hidden; `; const DarkMatter = styled.div` margin-top: 0px; `; const StyledValuesForm = styled.div` width: 100%; height: 100%; background: #ffffff11; color: #ffffff; padding: 0px 35px 25px; position: relative; border-radius: 5px; font-size: 13px; overflow: auto; `;