import React, { ChangeEvent, PureComponent } from 'react'; import { Button, InlineField, InlineFieldRow, Input } from '@grafana/ui'; import { CSVWave } from '../types'; import { defaultCSVWaveQuery } from '../constants'; interface WavesProps { waves?: CSVWave[]; onChange: (waves: CSVWave[]) => void; } interface WaveProps { wave: CSVWave; index: number; last: boolean; onChange: (index: number, wave?: CSVWave) => void; onAdd: () => void; } class CSVWaveEditor extends PureComponent { onFieldChange = (field: keyof CSVWave) => (e: ChangeEvent) => { const { value } = e.target as HTMLInputElement; this.props.onChange(this.props.index, { ...this.props.wave, [field]: value, }); }; onNameChange = this.onFieldChange('name'); onLabelsChange = this.onFieldChange('labels'); onCSVChange = this.onFieldChange('valuesCSV'); onTimeStepChange = (e: ChangeEvent) => { const timeStep = e.target.valueAsNumber; this.props.onChange(this.props.index, { ...this.props.wave, timeStep, }); }; render() { const { wave, last } = this.props; let action = this.props.onAdd; if (!last) { action = () => { this.props.onChange(this.props.index, undefined); // remove }; } return (