View File Name : opentsdbPlugin.418b8c8ea0d97ed99edb.js.map
\n }\n >\n Down sample\n \n
{\n const value = e.currentTarget.value;\n onChange({ ...query, downsampleInterval: value });\n }}\n onBlur={() => onRunQuery()}\n />\n \n
\n \n Aggregator\n \n \n {tsdbVersion >= 2 && (\n
\n Fill\n \n )}\n
\n Disable downsampling\n {\n const disableDownsampling = query.disableDownsampling ?? false;\n onChange({ ...query, disableDownsampling: !disableDownsampling });\n onRunQuery();\n }}\n />\n \n
\n \n \n \n );\n}\n\nexport const testIds = {\n section: 'opentsdb-downsample',\n interval: 'downsample-interval',\n};\n","import debounce from 'debounce-promise';\nimport { size } from 'lodash';\nimport React, { useCallback, useState } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport {\n InlineLabel,\n Select,\n InlineFormLabel,\n InlineSwitch,\n Icon,\n clearButtonStyles,\n useStyles2,\n AsyncSelect,\n Stack,\n} from '@grafana/ui';\n\nimport { OpenTsdbFilter, OpenTsdbQuery } from '../types';\n\nexport interface FilterSectionProps {\n query: OpenTsdbQuery;\n onChange: (query: OpenTsdbQuery) => void;\n onRunQuery: () => void;\n suggestTagKeys: (query: OpenTsdbQuery) => Promise
;\n filterTypes: string[];\n suggestTagValues: (value: string) => Promise;\n}\n\nexport function FilterSection({\n query,\n onChange,\n onRunQuery,\n suggestTagKeys,\n filterTypes,\n suggestTagValues,\n}: FilterSectionProps) {\n const buttonStyles = useStyles2(clearButtonStyles);\n\n const [tagKeys, updTagKeys] = useState>>();\n const [keyIsLoading, updKeyIsLoading] = useState();\n\n const [addFilterMode, updAddFilterMode] = useState(false);\n\n const [curFilterType, updCurFilterType] = useState('iliteral_or');\n const [curFilterKey, updCurFilterKey] = useState('');\n const [curFilterValue, updCurFilterValue] = useState('');\n const [curFilterGroupBy, updCurFilterGroupBy] = useState(false);\n\n const [errors, setErrors] = useState('');\n\n const filterTypesOptions = filterTypes.map((value: string) => toOption(value));\n\n function changeAddFilterMode() {\n updAddFilterMode(!addFilterMode);\n }\n\n function addFilter() {\n if (query.tags && size(query.tags) > 0) {\n const err = 'Please remove tags to use filters, tags and filters are mutually exclusive.';\n setErrors(err);\n return;\n }\n\n if (!addFilterMode) {\n updAddFilterMode(true);\n return;\n }\n\n // Add the filter to the query\n const currentFilter = {\n type: curFilterType,\n tagk: curFilterKey,\n filter: curFilterValue,\n groupBy: curFilterGroupBy,\n };\n\n // filters may be undefined\n query.filters = query.filters ? query.filters.concat([currentFilter]) : [currentFilter];\n\n // reset the inputs\n updCurFilterType('literal_or');\n updCurFilterKey('');\n updCurFilterValue('');\n updCurFilterGroupBy(false);\n\n // fire the query\n onChange(query);\n onRunQuery();\n\n // close the filter ditor\n changeAddFilterMode();\n }\n\n function removeFilter(index: number) {\n query.filters?.splice(index, 1);\n // fire the query\n onChange(query);\n onRunQuery();\n }\n\n function editFilter(fil: OpenTsdbFilter, idx: number) {\n removeFilter(idx);\n updCurFilterKey(fil.tagk);\n updCurFilterValue(fil.filter);\n updCurFilterType(fil.type);\n updCurFilterGroupBy(fil.groupBy);\n addFilter();\n }\n\n // We are matching words split with space\n const splitSeparator = ' ';\n const customFilterOption = useCallback((option: SelectableValue, searchQuery: string) => {\n const label = option.value ?? '';\n\n const searchWords = searchQuery.split(splitSeparator);\n return searchWords.reduce((acc, cur) => acc && label.toLowerCase().includes(cur.toLowerCase()), true);\n }, []);\n\n const tagValueSearch = debounce((query: string) => suggestTagValues(query), 350);\n\n return (\n \n Filters does not work with tags, either of the two will work but not both. }\n >\n Filters\n \n {query.filters &&\n query.filters.map((fil: OpenTsdbFilter, idx: number) => {\n return (\n