|
|
|
@ -1,4 +1,3 @@ |
|
|
|
|
import { css } from '@emotion/css'; |
|
|
|
|
import { cloneDeep } from 'lodash'; |
|
|
|
|
import React, { useMemo, useCallback } from 'react'; |
|
|
|
|
|
|
|
|
@ -21,7 +20,8 @@ import { |
|
|
|
|
FilterByValueTransformerOptions, |
|
|
|
|
FilterByValueType, |
|
|
|
|
} from '@grafana/data/src/transformations/transformers/filterByValue'; |
|
|
|
|
import { Button, RadioButtonGroup, stylesFactory } from '@grafana/ui'; |
|
|
|
|
import { Button, RadioButtonGroup, InlineField } from '@grafana/ui'; |
|
|
|
|
import { Box } from '@grafana/ui/src/unstable'; |
|
|
|
|
|
|
|
|
|
import { DataFrameFieldsInfo, FilterByValueFilterEditor } from './FilterByValueFilterEditor'; |
|
|
|
|
|
|
|
|
@ -37,7 +37,6 @@ const filterMatch: Array<SelectableValue<FilterByValueMatch>> = [ |
|
|
|
|
|
|
|
|
|
export const FilterByValueTransformerEditor = (props: TransformerUIProps<FilterByValueTransformerOptions>) => { |
|
|
|
|
const { input, options, onChange } = props; |
|
|
|
|
const styles = getEditorStyles(); |
|
|
|
|
const fieldsInfo = useFieldsInfo(input); |
|
|
|
|
|
|
|
|
|
const onAddFilter = useCallback(() => { |
|
|
|
@ -101,19 +100,17 @@ export const FilterByValueTransformerEditor = (props: TransformerUIProps<FilterB |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<div> |
|
|
|
|
<div className="gf-form gf-form-inline"> |
|
|
|
|
<div className="gf-form-label width-8">Filter type</div> |
|
|
|
|
<InlineField label="Filter type" labelWidth={16}> |
|
|
|
|
<div className="width-15"> |
|
|
|
|
<RadioButtonGroup options={filterTypes} value={options.type} onChange={onChangeType} fullWidth /> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div className="gf-form gf-form-inline"> |
|
|
|
|
<div className="gf-form-label width-8">Conditions</div> |
|
|
|
|
</InlineField> |
|
|
|
|
<InlineField label="Conditions" labelWidth={16}> |
|
|
|
|
<div className="width-15"> |
|
|
|
|
<RadioButtonGroup options={filterMatch} value={options.match} onChange={onChangeMatch} fullWidth /> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div className={styles.conditions}> |
|
|
|
|
</InlineField> |
|
|
|
|
<Box paddingLeft={2}> |
|
|
|
|
{options.filters.map((filter, idx) => ( |
|
|
|
|
<FilterByValueFilterEditor |
|
|
|
|
key={idx} |
|
|
|
@ -123,12 +120,10 @@ export const FilterByValueTransformerEditor = (props: TransformerUIProps<FilterB |
|
|
|
|
onDelete={() => onDeleteFilter(idx)} |
|
|
|
|
/> |
|
|
|
|
))} |
|
|
|
|
<div className="gf-form"> |
|
|
|
|
<Button icon="plus" size="sm" onClick={onAddFilter} variant="secondary"> |
|
|
|
|
Add condition |
|
|
|
|
</Button> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<Button icon="plus" size="sm" onClick={onAddFilter} variant="secondary"> |
|
|
|
|
Add condition |
|
|
|
|
</Button> |
|
|
|
|
</Box> |
|
|
|
|
</div> |
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
@ -143,12 +138,6 @@ export const filterByValueTransformRegistryItem: TransformerRegistryItem<FilterB |
|
|
|
|
categories: new Set([TransformerCategory.Filter]), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const getEditorStyles = stylesFactory(() => ({ |
|
|
|
|
conditions: css` |
|
|
|
|
padding-left: 16px; |
|
|
|
|
`,
|
|
|
|
|
})); |
|
|
|
|
|
|
|
|
|
const useFieldsInfo = (data: DataFrame[]): DataFrameFieldsInfo => { |
|
|
|
|
return useMemo(() => { |
|
|
|
|
const meta = { |
|
|
|
|