import React, { PureComponent, ReactNode } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { AdHocVariableFilter, AdHocVariableModel } from 'app/features/variables/types'; import { VariablePickerProps } from '../../pickers/types'; import { SelectableValue } from '@grafana/data'; import { AdHocFilterBuilder } from './AdHocFilterBuilder'; import { ConditionSegment } from './ConditionSegment'; import { addFilter, changeFilter, removeFilter } from '../actions'; import { REMOVE_FILTER_KEY } from './AdHocFilterKey'; import { AdHocFilterRenderer } from './AdHocFilterRenderer'; const mapDispatchToProps = { addFilter, removeFilter, changeFilter, }; const connector = connect(null, mapDispatchToProps); interface OwnProps extends VariablePickerProps {} type Props = OwnProps & ConnectedProps; export class AdHocPickerUnconnected extends PureComponent { onChange = (index: number, prop: string) => (key: SelectableValue) => { const { id, filters } = this.props.variable; const { value } = key; if (key.value === REMOVE_FILTER_KEY) { return this.props.removeFilter(id, index); } return this.props.changeFilter(id, { index, filter: { ...filters[index], [prop]: value, }, }); }; appendFilterToVariable = (filter: AdHocVariableFilter) => { const { id } = this.props.variable; this.props.addFilter(id, filter); }; render() { const { filters } = this.props.variable; return (
{this.renderFilters(filters)} 0 ? : null} onCompleted={this.appendFilterToVariable} />
); } renderFilters(filters: AdHocVariableFilter[]) { return filters.reduce((segments: ReactNode[], filter, index) => { if (segments.length > 0) { segments.push(); } segments.push(this.renderFilterSegments(filter, index)); return segments; }, []); } renderFilterSegments(filter: AdHocVariableFilter, index: number) { return ( ); } } export const AdHocPicker = connector(AdHocPickerUnconnected); AdHocPicker.displayName = 'AdHocPicker';