import classNames from 'classnames'; import React from 'react'; import { SortableHandle } from 'react-sortable-hoc'; import type { IParameter } from '../../../domain'; import { HelpField } from '../../../help'; import { Tooltip } from '../../../presentation'; import { StageConfigField } from '../stages/common'; export interface IParameterOption { value: string; } export interface IParameterProps extends IParameter { isMultiple?: boolean; removeParameter: () => void; setPinAllParametersState: () => void; updateParameterField: (changes: { [key: string]: any }) => void; } export class Parameter extends React.Component { constructor(props: IParameterProps) { super(props); } private addOption = (): void => { const { options, updateParameterField } = this.props; const newOptions = options.splice(0); newOptions.push({ value: '' }); updateParameterField({ options: newOptions }); }; private removeOption = (index: number): void => { const { options, updateParameterField } = this.props; updateParameterField({ options: options.filter((o) => o !== options[index]) }); }; private handleNameChange = (event: React.ChangeEvent): void => { const name = event.target.value; this.props.updateParameterField({ name }); }; private handleLabelChange = (event: React.ChangeEvent): void => { const label = event.target.value; this.props.updateParameterField({ label }); }; private handleRequiredChange = (event: React.ChangeEvent): void => { const required = event.target.checked; this.props.updateParameterField({ required }); }; private handleDescriptionChange = (event: React.ChangeEvent): void => { const description = event.target.value; this.props.updateParameterField({ description }); }; private handleDefaultChange = (event: React.ChangeEvent): void => { const defaultValue = event.target.value; this.props.updateParameterField({ default: defaultValue }); }; private handleOptionChange = (index: number, option: string): void => { const { options, updateParameterField } = this.props; const newOptions = options.splice(0); newOptions.splice(index, 1, { value: option }); updateParameterField({ options: newOptions }); }; private handlePinnedChange = (event: React.ChangeEvent): void => { this.props.updateParameterField({ pinned: event.target.checked }); }; private handleHasOptionChange = (event: React.ChangeEvent): void => { const { options, updateParameterField } = this.props; updateParameterField({ hasOptions: event.target.checked }); if (!options) { updateParameterField({ options: [{ value: '' }] }); } }; public render(): JSX.Element { const { name, label, required, pinned, description, hasOptions, options, isMultiple, removeParameter, inherited, } = this.props; const { addOption, handleLabelChange, handleNameChange, handleDefaultChange, handleDescriptionChange, handleHasOptionChange, handleOptionChange, handlePinnedChange, handleRequiredChange, removeOption, } = this; return (
{isMultiple && }
Label
{!inherited && (
)}
{hasOptions && ( {options.map(function (option: IParameterOption, index: number) { return (
) => handleOptionChange(index, event.target.value) } /> {!inherited && (
); })}
)}
); } } const DragHandler = SortableHandle(() => );