123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import { isArray, isString } from 'lodash';
- import { UrlQueryValue } from '@grafana/data';
- import { AdHocVariableFilter } from 'app/features/variables/types';
- export const toUrl = (filters: AdHocVariableFilter[]): string[] => {
- return filters.map((filter) => toArray(filter).map(escapeDelimiter).join('|'));
- };
- export const toFilters = (value: UrlQueryValue): AdHocVariableFilter[] => {
- if (isArray(value)) {
- const values = value as any[];
- return values.map(toFilter).filter(isFilter);
- }
- const filter = toFilter(value);
- return filter === null ? [] : [filter];
- };
- function escapeDelimiter(value: string | undefined): string {
- if (value === null || value === undefined) {
- return '';
- }
- return /\|/g[Symbol.replace](value, '__gfp__');
- }
- function unescapeDelimiter(value: string | undefined): string {
- if (value === null || value === undefined) {
- return '';
- }
- return /__gfp__/g[Symbol.replace](value, '|');
- }
- function toArray(filter: AdHocVariableFilter): string[] {
- return [filter.key, filter.operator, filter.value];
- }
- function toFilter(value: string | number | boolean | undefined | null): AdHocVariableFilter | null {
- if (!isString(value) || value.length === 0) {
- return null;
- }
- const parts = value.split('|').map(unescapeDelimiter);
- return {
- key: parts[0],
- operator: parts[1],
- value: parts[2],
- condition: '',
- };
- }
- function isFilter(filter: AdHocVariableFilter | null): filter is AdHocVariableFilter {
- return filter !== null && isString(filter.value);
- }
|